一些设置:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: from datetime import datetime
In [4]: dates = [datetime(2011, 1, 2), datetime(2011, 1, 5), datetime(2011, 1, 7), datetime(2011, 1, 8), datetime(2011, 1, 10), datetime(2011, 1, 12)]
In [5]: ts = pd.Series(np.random.randn(6), index=dates)
In [6]: ts
Out[6]:
2011-01-02 -0.412335
2011-01-05 -0.809092
2011-01-07 -0.442320
2011-01-08 -0.337281
2011-01-10 0.522765
2011-01-12 1.559876
好的,现在要回答你的第一个问题,a)是的,有根据你的意图,较笨重的方式。这是非常简单的:
In [9]: ts[datetime(2011, 1, 8):]
Out[9]:
2011-01-08 -0.337281
2011-01-10 0.522765
2011-01-12 1.559876
这是一个片包含您选择的日期之后的所有值。第二个问题
In [10]: ts[datetime(2011, 1, 8):][0]
Out[10]: -0.33728079849770815
,(B) - 这种类型的索引是原来的一片,就像其他numpy的数组:您可以选择只是第一个,因为你想,通过。这不是原件的副本。看到这个问题,或许多类似: Bug or feature: cloning a numpy array w/ slicing
为了演示,让我们修改切片:
In [21]: ts2 = ts[datetime(2011, 1, 8):]
In [23]: ts2[0] = 99
这改变了原来的时间序列对象TS,TS2以来是一个切片,而不是一个副本。
In [24]: ts
Out[24]:
2011-01-02 -0.412335
2011-01-05 -0.809092
2011-01-07 -0.442320
2011-01-08 99.000000
2011-01-10 0.522765
2011-01-12 1.559876
如果你想一个副本,你可以(一般)使用的复制方法,或者(在这种情况下)使用截断:
In [25]: ts3 = ts.truncate(before='2011-01-08')
In [26]: ts3
Out[26]:
2011-01-08 99.000000
2011-01-10 0.522765
2011-01-12 1.559876
改变这个副本不会改变原来的。
In [27]: ts3[1] = 99
In [28]: ts3
Out[28]:
2011-01-08 99.000000
2011-01-10 99.000000
2011-01-12 1.559876
In [29]: ts #The january 10th value will be unchanged.
Out[29]:
2011-01-02 -0.412335
2011-01-05 -0.809092
2011-01-07 -0.442320
2011-01-08 99.000000
2011-01-10 0.522765
2011-01-12 1.559876
这个例子直接来自Wes的“用于数据分析的Python”。一探究竟。这很棒。
在不同的数据集上使用你的命令'ts [datetime(2011,1,8):]',我得到错误:'TypeError:'模块'对象不可调用' – Andreuccio
@Andreuccio检查你的datetime import ,它应该是'从datetime import datetime'。虽然我的答案可能需要更新,如果这是改变。 – Aman