首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘'int’对象在if语句之后不可订阅

‘'int’对象在if语句之后不可订阅
EN

Stack Overflow用户
提问于 2018-09-18 18:52:39
回答 3查看 306关注 0票数 2

所以我有一个数据:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'score': [1, 3, 4, 5, 2]})

我想根据“分数”栏中的条件创建一个新的列。

我就这样试过了

代码语言:javascript
复制
df['happiness'] = df['score']
def are_you_ok(df):
    if df['happiness'] >= 4:
        return 'happy',
    elif df['happiness'] <= 2:
        return 'sad',
    else:
        return 'ok'

df['happines'] = df['happiness'].apply(are_you_ok)
df

但是,当我试图运行它时,我得到的只是:

代码语言:javascript
复制
TypeError: 'int' object is not subscriptable

我能不能不使用这种带整数的函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-18 18:55:23

听起来你想要np.selectnumpy

代码语言:javascript
复制
import numpy as np

conds = [df.score >=4, df.score <=2]

choices = ['happy', 'sad']

df['happiness'] = np.select(conds, choices, default='ok')

>>> df
    name  score happiness
0  Jason      1       sad
1  Molly      3        ok
2   Tina      4     happy
3   Jake      5     happy
4    Amy      2       sad

注意:通过使用numpy (或pd.np,取决于导入熊猫的方式)而不是仅使用np,可以避免显式导入np

票数 2
EN

Stack Overflow用户

发布于 2018-09-18 18:57:21

使用pd.cut

代码语言:javascript
复制
pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])
Out[594]: 
0      sad
1       ok
2       ok
3    happy
4      sad

#df['yourcol']=pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])
票数 1
EN

Stack Overflow用户

发布于 2018-09-18 18:57:48

问题是,apply将您的函数应用于列中的每个值。df不是are_you_ok内部的一个DataFrame,而是一个整数(在您的例子中)。自然,Python抱怨不能用['happiness']索引整数。

不过,您的代码很容易修复。只需重写are_you_ok,使其与整数参数一起工作。

代码语言:javascript
复制
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
   ...:         'score': [1, 3, 4, 5, 2]})
   ...:         
In [3]: def are_you_ok(x):
   ...:     if x >= 4:
   ...:         return 'happy'
   ...:     elif x <= 2:
   ...:         return 'sad'
   ...:     else:
   ...:         return 'ok'
   ...:     
In [4]: df['happiness'] = df['score'].apply(are_you_ok)
In [5]: df
Out[5]: 
    name  score happiness
0  Jason      1       sad
1  Molly      3        ok
2   Tina      4     happy
3   Jake      5     happy
4    Amy      2       sad
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52392922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档