2016-12-22 3 views
3

これらのインデクサーと<クラスの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'を '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.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() 

Attribute Access in docs

あなたがいる場合にのみ、このアクセスを使用することができますindex要素は有効なpython識別子です。 s.1は許可されません。有効な識別子の説明については、ここを参照してください。

属性は既存のメソッド名と競合すると利用できません。 s.minは許可されません。

同様に、index、major_axis、minor_axis、items、labelsのいずれかのリストと競合する場合、属性は使用できません。

これらのいずれの場合でも、標準のインデックス作成は引き続き有効です。 s ['1']、s ['min']、およびs ['index']は、対応する要素または列にアクセスします。

シリーズ/パネルへのアクセスは0.13.0から開始しています。

+0

はい、間違ったwitn 'head'と 'head_id'で間違っていますか? – Edward

+1

'head_id'はpandas関数ではないので、完全に動作します。 – jezrael

関連する問題