Je suis confus comment pandas a explosé hors des limites pour les objets datetime avec ces lignes:
import pandas as pd
BOMoffset = pd.tseries.offsets.MonthBegin()
# here some code sets the all_treatments dataframe and the newrowix, micolix, mocolix counters
all_treatments.iloc[newrowix,micolix] = BOMoffset.rollforward(all_treatments.iloc[i,micolix] + pd.tseries.offsets.DateOffset(months = x))
all_treatments.iloc[newrowix,mocolix] = BOMoffset.rollforward(all_treatments.iloc[newrowix,micolix]+ pd.tseries.offsets.DateOffset(months = 1))
Ici all_treatments.iloc[i,micolix]
Est un datetime défini par pd.to_datetime(all_treatments['INDATUMA'], errors='coerce',format='%Y%m%d')
, et INDATUMA
est une information de date au format 20070125
.
Cette logique semble fonctionner sur des données fictives (pas d'erreurs, les dates ont du sens), donc pour le moment je ne peux pas reproduire alors qu'il échoue dans toutes mes données avec l'erreur suivante:
pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2262-05-01 00:00:00
Étant donné que pandas représente les horodatages en résolution nanosecondes, l'intervalle de temps qui peut être représenté à l'aide d'un entier 64 bits est limité à environ 584 ans
pd.Timestamp.min
Out[54]: Timestamp('1677-09-22 00:12:43.145225')
In [55]: pd.Timestamp.max
Out[55]: Timestamp('2262-04-11 23:47:16.854775807')
Et votre valeur est hors de cette plage 2262-05-01 00:00:00 et donc l'erreur hors limites
Tout droit sorti de: http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#timestamp-limitations
Définition du paramètre errors
dans pd.to_datetime
à 'coerce'
provoque le remplacement des valeurs hors limites par NaT
. Citant le docs :
Si "contraindre", alors l'analyse non valide sera définie comme NaT
Par exemple.:
datetime_variable = pd.to_datetime(datetime_variable, errors = 'coerce')
Cela ne fixe pas les données (évidemment), mais permet toujours de traiter les points de données non NaT.