您正在使用不适用的索引快捷方式,请参见此处: http: //pandas.pydata.org/pandas-docs/dev/timeseries.html#datetime-indexing
创建时间索引框架
In [7]: df = DataFrame(randn(10,2),columns=list('AB'),index=date_range('20130101',periods=10))
In [8]: df
Out[8]:
A B
2013-01-01 -1.423000 0.455915
2013-01-02 -0.665164 -0.057901
2013-01-03 2.446799 -1.788711
2013-01-04 0.054663 0.254730
2013-01-05 -0.371827 -0.775781
2013-01-06 0.275138 -1.221521
2013-01-07 1.338971 0.652810
2013-01-08 0.454797 -0.966469
2013-01-09 0.942590 0.302687
2013-01-10 -0.587606 -0.562724
这是切片在行上选择的便利
In [9]: df[df.index[1]:df.index[2]]
Out[9]:
A B
2013-01-02 -0.665164 -0.057901
2013-01-03 2.446799 -1.788711
这会给您一个错误,因为它正在寻找一列(您传递了一个值)
In [10]: df[df.index[2]]
KeyError: u'no item named 2013-01-03 00:00:00'
这里是选择没有歧义的方法
从行中选择单个项目
In [11]: df.loc[df.index[2]]
Out[11]:
A 2.446799
B -1.788711
Name: 2013-01-03 00:00:00, dtype: float64
从行中选择一个范围
In [12]: df.loc[df.index[2]:df.index[3]]
Out[12]:
A B
2013-01-03 2.446799 -1.788711
2013-01-04 0.054663 0.254730
从列中选择
In [13]: df.loc[:,'A']
Out[13]:
2013-01-01 -1.423000
2013-01-02 -0.665164
2013-01-03 2.446799
2013-01-04 0.054663
2013-01-05 -0.371827
2013-01-06 0.275138
2013-01-07 1.338971
2013-01-08 0.454797
2013-01-09 0.942590
2013-01-10 -0.587606
Freq: D, Name: A, dtype: float64
如果我们再次这样做,我认为这个 api 不会被允许....但是太根深蒂固的[]
选择是 WAY 超载和 pandas 尽最大努力弄清楚你想要什么