使用这些索引器无法在<class'pandas.indexes.range.RangeIndex'>上进行切片索引

Edw*_*ard 8 python-3.x pandas

我脑子里很奇怪的错误

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]})
Run Code Online (Sandbox Code Playgroud)

然后

df.loc[df.head, 'appraisal'].mean()
Run Code Online (Sandbox Code Playgroud)

TypeError: cannot do slice indexing on <class 'pandas.indexes.range.RangeIndex'> with these indexers
Run Code Online (Sandbox Code Playgroud)

但是,如果我将“ head”更改为足够的“ 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
Run Code Online (Sandbox Code Playgroud)

怎么了?

jez*_*ael 6

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()
Run Code Online (Sandbox Code Playgroud)

docs中的属性访问

仅当index元素是有效的python标识符(不允许egs1)时,才能使用此访问权限。有关有效标识符的说明,请参见此处。

如果该属性与现有方法名称冲突,则该属性将不可用,例如,不允许s.min

同样,如果该属性与以下任何列表冲突,则该属性将不可用:index,major_axis,minor_axis,item,label。

在任何这些情况下,标准索引仍将起作用,例如s ['1'],s ['min']和s ['index']将访问相应的元素或列。

系列/面板访问从0.13.0开始可用。