loc使用DataFrame自己的索引在DataFrame上失败?

时间:2015-02-06 00:17:11

标签: python pandas

我有一个带有DateTime索引的DataFrame,其中有许多重复的索引标签(即具有相同日期时间的行)。我想查看具有相同日期时间的行。所以我有以下

utimes = pd.unique(data.index.tolist())
for time in utimes:
    data_now = data.loc[time]
    # Do some processing on the data_now

这失败并出现示例错误:KeyError'标签[2015-02-05 21:54:00 + 00:00不在[index]'

只是为了检查这在创建utimes时不是问题,这会失败

data.loc[data.index[0]]

具有相同的错误消息。怎么会这样?这是索引的样子

> data.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2015-02-05 21:54:00+00:00, ..., 2015-02-05 23:24:00+00:00]  
Length: 457, Freq: None, Timezone: UTC

> data.index[0]
Timestamp('2015-02-05 22:24:00+0000', tz='UTC')

为什么我不能将.loc与data_frame自己的索引一起使用?

1 个答案:

答案 0 :(得分:3)

看起来pd.unique不尊重datetime64 dtype:

In [11]: df.index
Out[11]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2015-02-05 22:24:00+00:00]
Length: 1, Freq: None, Timezone: UTC

In [12]: pd.unique(df.index)
Out[12]: array([1423175040000000000L], dtype=object)

现在(直到这个bug在pandas中得到修复)你可以在to_datetime调用中包装它:

In [13]: pd.to_datetime(pd.unique(df.index))
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2015-02-05 22:24:00]
Length: 1, Freq: None, Timezone: None

或者,更清楚地说,您可以使用唯一方法DatetimeIndex:

In [14]: df.index.unique()
Out[14]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2015-02-05 22:24:00+00:00]
Length: 1, Freq: None, Timezone: UTC