2016-12-22 222 views
3

這是非常奇怪的錯誤在我的腦海不能做切片索引上的<class 'pandas.indexes.range.RangeIndex'>這些索引

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'head': [1, 1,2,2,1,3,2,3,1,1,1,2, 3,3], 
        'appraisal': [1,2,1,3,1,4,1,5,1,1,2,3,4,5]}) 

然後

df.loc[df.head, 'appraisal'].mean() 

TypeError: cannot do slice indexing on <class 'pandas.indexes.range.RangeIndex'> with these indexers 

但是,如果我改變'頭'爲充足的'head_id'它的工作是正確的

df = pd.DataFrame({'head_id': [1, 1,2,2,1,3,2,3,1,1,1,2, 3,3], 
        'appraisal': [1,2,1,3,1,4,1,5,1,1,2,3,4,5]}) 
df.loc[df.head_id, 'appraisal'].mean() 
2.0 

有什麼不對?

回答

4

head是大熊貓的功能,所以需要[],同樣是不可能的使用df.sumdf.min - 但工程df['sum']df['mean']

df.loc[df['head'], 'appraisal'].mean() 

#if change 'head' to 'head1' it works 
df.loc[df.head1, 'appraisal'].mean() 

Attribute Access in docs

您可以使用此訪問只有當索引元素是一個有效的Python標識符,例如s.1是不允許的。請參閱此處以獲取有效標識符的解釋。

如果該屬性與現有方法名稱相沖突,則該屬性將不可用。 s.min是不允許的。

同樣,如果屬性與以下列表中的任何一個發生衝突,該屬性將不可用:index,major_axis,minor_axis,items,labels。

在任何這些情況下,標準索引仍然可以工作,例如, s ['1'],s ['min']和s ['index']將訪問相應的元素或列。

系列/面板訪問從0.13.0開始有效。

+0

是的,但是'頭'有什麼問題,並用'head_id'糾正? – Edward

+1

,因爲'head_id'不是熊貓的功能,所以它完美的工作。 – jezrael