我有一个大型DataFrame,由以下类型的日期时间索引
2013-07-15 09:30:00.073000,-0.909437,0.287493,-0.071288
当我尝试以下代码时,我得到一个结果
tempdf[tempdf.index[1]:tempdf.index[2]]
但是当我尝试
时tempdf[tempdf.index[2]]
我收到以下错误
KeyError: u'no item named 2013-07-15 09:30:00.076000'
实际上,以下类型的代码也会出错。
tempdf[tempdf.index[3]:tempdf.index[8]]
答案 0 :(得分:2)
您正在使用不适用的索引快捷方式,请参阅此处: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
如果wes重新做了这件事,我认为这个API不会被允许......但是太根深蒂固了
[]
选择是WAY重载,pandas尽力找出你想要的东西