2015-10-20 10 views
5

Ich habe eine Zeitreihe von datetime.date indiziert. Hier sind die ersten Knoten der Serie:Wie schneidet man eine Pandas-Zeitreihe an Daten ab, die nicht im Index enthalten sind?

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

ich von Anfang an der Reihe schneiden möchten, bis 28. Dezember 2000, aber das funktioniert nicht, da zu diesem Zeitpunkt nicht im Index ist (ich bekomme eine KeyError wenn ich original_series[:datetime.date(2000,12,28)] versuchen. ich habe auch versucht, den Index zu Zeitstempel konvertieren, aber das gibt sehr falsche Ergebnisse (produziert es gefälschte Knoten, siehe unten), so fragte ich mich, ob es für dieses Problem ein guter Ansatz ist.

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

Auf den ersten Blick sieht das gut aus:

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

Aber dann versuche ich meine Slicing zu tun (wo diese zusätzlichen Tage im Januar 2000 kommen aus?):

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 

Antwort

3

Sie können einfach tun, wenn ts Ihre time.serie ist:

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 

Wenn Sie index als string nur noch weiter mit:

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

Ihre answe r ist absolut richtig, aber ich war auch urkomisch dumm - ich hatte meine Zeitreihe nicht nach Index sortiert, daher meine Verwirrung über die "hergestellten" Daten. Danke für die Hilfe. –