无法使用这些索引器对<class'pandas.indexes.range.rangeindex'=“”>进行切片索引

时间:2016-12-22 15:55:28

标签: 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]})

然后

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

出了什么问题?

1 个答案:

答案 0 :(得分:6)

head是pandas的功能,因此需要[],同样不可能使用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

  

仅当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开始可用。