“int”对象不可订阅。Pandas

2024-10-01 09:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据集df。在这个数据集中,我有列Gross 我对Python完全陌生

enter image description here

我试图将此列转换为float并显示sum()

dollarGross = lambda x: float(x[1:-1])
df.Gross = df.Gross.apply(dollarGross)
df.Gross.sum()

但我得到了一个错误:

^{pr2}$

我错过了什么?在


Tags: 数据lambdadf错误floatapplysumgross
3条回答

您的错误从这里开始:

df.Gross.apply(dollarGross)

df.Gross是一个pandas.Series,当您使用apply方法时,pandas会遍历序列中的每个成员,并将该成员传递给名为dollarGross的“可调用”(也称为函数,稍后将详细介绍)。要理解的关键是pandas.Series的成员是什么。在本例中,它们是整数。因此序列中的每个整数都被传递到dollarGross,并按如下方式调用:

^{pr2}$

这又是这样的:

float(184[1:-1])

这没道理。您正在尝试使用[1:-1],这是对整数的订阅/切片语法。这就是错误告诉你的:嘿,你不能下标一个整数!


这就是为什么告诉我们你想做什么是好事。因为现在我们可以帮你了。还记得我说过可以将“callable”传递给apply。嗯,floatfloat对象类的名称。。。它也是一个“可调用的”,因为我们可以这样做float(184)。所以。。。。在

df.Gross.apply(float)

应该把事情做好。但是这样做可能更好

df.Gross.astype(float)

或者,如果df.Gross的某些成员不能解释为float值,那么最好使用@MaxU的答案。在

AFAIKpd.to_numeric()方法为我们提供了将字符串转换为数值的最常用方法:

df['Gross'] = pd.to_numeric(df['Gross'], errors='coerce')
print(df['Gross'].sum())

我想你只要写dollarGross = lambda x: float(x)。如果使用方括号,则尝试访问数组。在

相关问题 更多 >