如何在不在索引中的日期切片大熊猫时间序列?

时间:2015-10-20 10:15:50

标签: python datetime pandas slice series

我有一个由datetime.date索引的时间序列。以下是该系列的第一个结:

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

我想从系列的开头到2000年12月28日切片,但由于该日期不在索引中,所以不起作用(当我尝试original_series[:datetime.date(2000,12,28)]时,我得到了一个KeyError。我&# 39;我还尝试将索引转换为时间戳,但这会产生非常虚假的结果(它会产生假结,见下文),所以我想知道是否有一个很好的解决这个问题的方法。

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

1 个答案:

答案 0 :(得分:4)

如果tstime.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')]