web-dev-qa-db-fra.com

pandas hors horodatage de la nanoseconde après le décalage en avant plus l'ajout d'un décalage d'un mois

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
30
László

É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

45
jetpackdata.com

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.

18
Pawel Kranzberg