1

我有一个由以下类型的日期时间索引的大型 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]]
4

1 回答 1

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

如果我们再次这样做,我认为这个 api 不会被允许....但是太根深蒂固的[]选择是 WAY 超载和 pandas 尽最大努力弄清楚你想要什么

于 2013-07-22T18:26:50.047 回答