这是我心中非常奇怪的错误
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;足够的&#39; head_id&#39;它的工作正确
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
出了什么问题?
答案 0 :(得分:6)
head
是pandas的功能,因此需要[]
,同样不可能使用df.sum
,df.min
- 但有效df['sum']
,df['mean']
:
df.loc[df['head'], 'appraisal'].mean()
#if change 'head' to 'head1' it works
df.loc[df.head1, 'appraisal'].mean()
仅当index元素是有效的python标识符时才可以使用此访问权限,例如s.1是不允许的。有关有效标识符的说明,请参见此处。
如果该属性与现有方法名称冲突,则该属性将不可用,例如 s.min 是不允许的。
同样,如果该属性与以下任何列表冲突,该属性将不可用:index,major_axis,minor_axis,items,labels。
在任何这些情况下,标准索引仍然有效,例如: s [&#39; 1&#39;],s [&#39; min&#39;]和s [&#39; index&#39;]将访问相应的元素或列。
系列/面板访问从0.13.0开始可用。