INT'调用pandas apply函数时,object不可订阅

时间:2016-11-29 09:31:57

标签: python

我在使用pandas应用功能时遇到了相当简单的问题。我有一个数据框,有受访者和#39; agetype - np.int64)。我想创建一个group age by categories的新列,例如18-2526-3536+

我认为最好的方法是编写一个函数,然后将其应用于数据框。但是,我永远收到此错误:

  

' 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

有什么想法吗?

1 个答案:

答案 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