2015-06-05 53 views
2

我迄今爲止由EdChum提供以下代碼:Python的DatetimeIndex錯誤 - 類型錯誤:(「不能做標籤索引上的<class‘pandas.tseries.index.DatetimeIndex’

In [1]: 
df = pd.DataFrame({'a': [None] * 6, 'b': [2, 3, 10, 3, 5, 8]}) 
df["c"] =np.NaN 

df["c"][0] = 1 
df["c"][2] = 3 


def func(x): 
    if pd.notnull(x['c']): 
     return x['c'] 
    else: 
     return df.iloc[x.name - 1]['c'] * x['b'] 
df['c'] = df.apply(func, axis =1) 
df['c'] = df.apply(func, axis =1) 
df['c'] = df.apply(func, axis =1) 
df 

Out[1]: 
     a b c 
0 None 2 1 
1 None 3 3 
2 None 10 3 
3 None 3 9 
4 None 5 45 
5 None 8 360 

這也工作得很好,但只要我改變dateframe的指數= DF如下:

rng = pd.date_range('1/1/2011', periods=6, freq='D') 

df = pd.DataFrame({'a': [None] * 6, 'b': [2, 3, 10, 3, 5, 8]},index=rng) 

我得到以下錯誤:TypeError: ("cannot do label indexing on <class 'pandas.tseries.index.DatetimeIndex'> with these indexers [2011-01-01 00:00:00] of <class 'pandas.tslib.Timestamp'>", u'occurred at index 2011-01-02 00:00:00')

什麼是這裏的問題如何d? o我需要調整代碼才能使用da DatetimeIndex工作?

+0

你在熊貓0.16.1和numpy上運行這個工程的版本是什麼版本1.9.2 – EdChum

+0

啊我看到這個問題,這裏的問題是,在索引是int64之前,現在是datetimeindex,所以這不起作用 – EdChum

+0

我使用熊貓0.16.0和numpy 1.9.2。我需要更新熊貓嗎? –

回答

4

下工作,這裏的區別是,我使用get_loc獲得該指數的日期時間值的整數位置:

In [48]: 

rng = pd.date_range('1/1/2011', periods=6, freq='D') 
df = pd.DataFrame({'a': [None] * 6, 'b': [2, 3, 10, 3, 5, 8]},index=rng) 
df["c"] =np.NaN 
​ 
df["c"][0] = 1 
df["c"][2] = 3 
​ 
​ 
def func(x): 
    if pd.notnull(x['c']): 
     return x['c'] 
    else: 
     return df.iloc[df.index.get_loc(x.name) - 1]['c'] * x['b'] 
df['c'] = df.apply(func, axis =1) 
df['c'] = df.apply(func, axis =1) 
df['c'] = df.apply(func, axis =1) 
df 

Out[48]: 
       a b c 
2011-01-01 None 2 1 
2011-01-02 None 3 3 
2011-01-03 None 10 3 
2011-01-04 None 3 9 
2011-01-05 None 5 45 
2011-01-06 None 8 360 
+0

非常感謝!你不知道多少時間和花費我試圖解決這些問題! –

0

只是一個供參考,我解決了這個通過更新大熊貓到最新的穩定版本。

相關問題