2016-11-29 2 views
0

pandas apply関数ではかなり単純なことに直面しています。回答者のage列(type - np.int64)のデータフレームがあります。 18-2526-3536+のようなgroup age by categoriesという新しい列を作成したいとします。int 'pandas apply関数を呼び出すときにオブジェクトにサブスクリプトがありません

私は、関数を記述してそれをデータフレームに適用することをお勧めします。しかし、私は永久にこのエラーを取得しています:

「int型」オブジェクトは、

」の添字ではありません、私はそうでint()astype(int)と同様に、多くのオプションを試してみました。

私は__getitem__ attributeについて他のすべてのものを読んでいますが、なぜ今働いているのか分かりません。私は単純に整数値を取得し、条件比較を行い、列に文字列を割り当てようとします。ここで

は私の関数である。

def group_by_age(row): 
    data = row['age_response'] 
    if ((data['age_response'].astype(int)) > 18) & ((data['age_response'].astype(int)) < 26): 
     row['age_grouped'] = '18-25' 
    elif ((data['age_response'].astype(int)) > 25) & ((data['age_response'].astype(int)) < 36): 
     row['age_grouped'] = '26-35' 
    elif (data['age_response'].astype(int)) > 35: 
     row['age_grouped'] = '36-45' 
return row 

任意の考え?

+0

'data = row ['age_response']'だから、 'data ['age_response']'とは何でしょうか?あなたの 'row'変数には同じ指定子を持つ2次元がありますか? – UnholySheep

答えて

0

group_by_ageapplyに渡すと、applyは関数に1つの要素(あなたの場合はint)を渡すという問題があります。したがって、rowの内部はgroup_by_ageであり、row['age_response']'int' object is not subscriptable'例外を発生させます。

いずれにしても、ソリューションを設計していると思います。

import pandas as pd 

def group_age(x): 
    if 18 <= x <= 25: 
     return '18-25' 
    if 26 <= x <= 35: 
     return '26-35' 
    if x >= 36: 
     return '36-45' 

df = pd.DataFrame({'age': [18, 30, 25, 36, 20]}) 

print(df) 
>> age 
    0 18 
    1 30 
    2 25 
    3 36 
    4 20 

df['group'] = df['age'].apply(group_age) 

print(df) 

>> age group 
    0 18 18-25 
    1 30 26-35 
    2 25 18-25 
    3 36 36-45 
    4 20 18-25 
+0

ありがとうございました! –

+0

私は間違いなく問題をoverthought :) –

関連する問題