2015-10-20 9 views
5

Ho una serie temporale indicizzata da datetime.date. Ecco le prime nodi della serie:Come si suddividono le serie temporali dei panda sulle date non presenti nell'indice?

1999-12-31 0 
2000-06-30 170382.118454 
2000-12-29 -319260.443362 

voglio affettare dall'inizio della serie fino al 28 dicembre 2000, ma questo non funziona in quanto tale data non è nell'indice (ho un KeyError quando provo original_series[:datetime.date(2000,12,28)]. ho anche provato a convertire l'indice al timestamp, ma che dà risultati molto spuri (che produce nodi finti, vedi sotto), quindi mi sono chiesto se c'è un buon approccio a questo problema.

test = pd.Series(original_series.values, map(pd.Timestamp, original_series.index)) 

A prima vista, questo sembra a posto:

1999-12-31   0.000000 
2000-06-30 170382.118454 
2000-12-29 -319260.443362 

Ma poi cerco di fare il mio affettare (da dove vengono quei giorni in più a gennaio 2000 vengono?):

In [84]: test[:'2000-12-28'] 
Out[84]: 
1999-12-31   0.000000 
2000-06-30 170382.118454 
2000-01-03 -71073.979016 
2000-01-04 100498.744748 
2000-01-05  91104.743684 
2000-01-06  82290.255459 

risposta

3

Si può semplicemente fare, se ts è il vostro time.serie:

In [77]: ts = pd.Series([99,65],index=pd.to_datetime(['2000-12-24','2000-12-30'])) 

In [78]: ts 
Out[78]: 
2000-12-24 99 
2000-12-30 65 
dtype: int64 

In [79]: ts[ts.index<=pd.to_datetime('2000-12-28')] 
Out[79]: 
2000-12-24 99 
dtype: int64 

Se avete index come string solo procedere con:

ts[ts.index.map(pd.to_datetime)<=pd.to_datetime('2000-12-28')] 
+0

tuo answe Ho assolutamente ragione, ma ero anche esageratamente stupido - non avevo ordinato le mie serie temporali per indice, quindi la mia confusione riguardo le date "fabbricate". Grazie per l'aiuto. –

Problemi correlati