2015-02-06 43 views
2

我有一個DataFrame與DateTime索引有許多重複索引標籤(即具有相同日期時間的行)。我想查看具有相同日期時間的行。所以,我有以下loc失敗?

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

此失敗的例子錯誤:KeyError異常 '標籤[2015年2月5日21:54:00 + 00:00]不是在[索引]'

只是爲了檢查,這是不是在創作中出現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自己的指數使用任何想法?

回答

3

它看起來像pd.unique不尊重datetime64 D型:

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) 

現在(直到這種錯誤固定在大熊貓),你可以在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 
+0

請參閱g ithub問題https://github.com/pydata/pandas/issues/9431 – 2015-02-06 02:22:06

+0

非常感謝,至少我知道我並不完全瘋狂。 – Bogdanovist 2015-02-06 03:10:33