2015-10-01 13 views
17

Sono confuso come i panda fatto esplodere fuori dai limiti per gli oggetti datetime con queste righe:panda fuori dai limiti nanosecondo timestamp dopo compensato rollforward, più l'aggiunta di un mese compensato

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

Ecco all_treatments.iloc[i,micolix] è un datetime fissato dal pd.to_datetime(all_treatments['INDATUMA'], errors='coerce',format='%Y%m%d'), e INDATUMA è informazioni sulla data nel formato 20070125.

Questa logica sembra funzionare sui dati finti (nessun errore, date un senso), quindi al momento non riesco a riprodurre mentre fallisce in tutta la mia dati con il seguente errore:

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

[creare un minimo, ma completo * * esempio di codice] (http://stackoverflow.com/help/mcve) – jfs

risposta

18

Dal panda rappresenta timestamp in nanosecondi risoluzione, il periodo che può essere rappresentato da un numero intero a 64 bit è limitato a circa 584 anni

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

e proprio valore è fuori di questo intervallo 2262/05/01 00:00:00 e quindi l'errore di outofbound

Direttamente da: http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#timestamp-limitations

+2

fai a sapere se è possibile avere un indice di data che va oltre quella portata? – mac13k

+0

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

+0

Lo sapevo, grazie. Il problema è che puoi fare in modo che l'indice sia compreso nell'intervallo di tempo che va oltre i limiti di data e ora e va bene finché non provi effettivamente a utilizzare i singoli valori di quell'indice, quindi riceverai errori o date errate. – mac13k

Problemi correlati