2015-10-01 15 views
17

Ich bin verwirrt, wie Pandas mit diesen Zeilen außerhalb der Grenzen für Datetime-Objekte blies:Pandas außerhalb der Grenzen Nanosekunde Zeitstempel nach dem Offset die aktualisierende und das Hinzufügen eines Monats Offset

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)) 

Hier all_treatments.iloc[i,micolix] ist ein Datetime-Set von pd.to_datetime(all_treatments['INDATUMA'], errors='coerce',format='%Y%m%d') und INDATUMA ist Datumsinformation im Format 20070125.

Diese Logik scheint auf Mock-Daten zu arbeiten (keine Fehler, Termine Sinn machen), so im Moment kann ich nicht reproduzieren, während es in meinem ganzen Daten mit dem folgenden Fehler fehl:

pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2262-05-01 00:00:00 
+1

[minimal erstellen, aber * komplettes * Codebeispiel] (http://stackoverflow.com/help/mcve) – jfs

Antwort

18

Da Pandas repräsentiert die Zeitspanne Zeitstempel in Nanosekunde Auflösung, die eine 64-Bit-integer dargestellt werden kann auf etwa 584 Jahre begrenzt

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') 

und Ihr Wert liegt außerhalb dieses Bereichs 2262.05.01 00.00.00 und somit der outofbounds Fehler

Gerade aus: http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#timestamp-limitations

+2

Wissen Sie, ob es möglich ist, ein Datum Index zu haben, die über das hinausgeht dieser Bereich? – mac13k

+0

@ mac13k siehe [dies] (http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#timeseries-oob) ... – blacksite

+0

Ich wusste davon, danke. Das Problem ist, dass Sie den Index aus dem Zeitraumbereich erstellen können, der über die Timestamp-Limits hinausgeht, und es ist in Ordnung, bis Sie tatsächlich versuchen, die einzelnen Werte aus diesem Index zu verwenden - dann erhalten Sie entweder Fehler oder falsche Daten. – mac13k