2015-10-20 83 views
5

我有一个由datetime.date索引的时间序列。下面是该系列的第一个结:如何在不包含索引的日期中分割熊猫时间序列?

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

我想从系列,直到2000年12月28日开始到切片,但这不起作用,因为该日期不在指数(我得到一个KeyError异常当我尝试original_series[:datetime.date(2000,12,28)]。我也试过指数转换成时间戳,但给人很假的结果(其生产假节,见下文),所以我想,如果有一个很好的办法解决这个问题。

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

乍一看,这看起来很好:

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

但后来我试着做我的切片(在哪里在2000年1月这些额外的日子是从哪里来的?):

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 

回答

3

你可以简单地做,如果ts是你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 

如果你有indexstring刚刚入手:

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

你answe r是绝对正确的,但我也很愚蠢 - 我没有按指数排序我的时间序列,因此我对“制造”日期感到困惑。谢谢您的帮助。 –

相关问题