我在使用pandas
应用功能时遇到了相当简单的问题。我有一个数据框,有受访者和#39; age
列type - np.int64
)。我想创建一个group age by categories
的新列,例如18-25
,26-35
,36+
。
我认为最好的方法是编写一个函数,然后将其应用于数据框。但是,我永远收到此错误:
' 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 :(得分:0)
如果您将group_by_age
传递给apply
,则问题是apply
将单个元素传递给函数(在您的情况下为int)。因此row
内的group_by_age
是一个int,然后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