我有数据集df。在此数据集中,我有列Gross
我是Python的新手,
我正在尝试将此列转换为float
并显示sum()
dollarGross = lambda x: float(x[1:-1])
df.Gross = df.Gross.apply(dollarGross)
df.Gross.sum()
但是我收到了这个错误:
<ipython-input-294-a9010792122a> in <lambda>(x)
----> 1 dollarGross = lambda x: float(x[1:-1])
2 df.Gross = df.Gross.apply(dollarGross)
3 df.Gross.sum()
TypeError: 'int' object is not subscriptable
我错过了什么?
答案 0 :(得分:2)
AFAIK pd.to_numeric()方法为我们提供了将字符串转换为数值的最惯用的方法:
df['Gross'] = pd.to_numeric(df['Gross'], errors='coerce')
print(df['Gross'].sum())
答案 1 :(得分:2)
您的错误从此处开始:
df.Gross.apply(dollarGross)
df.Gross
是pandas.Series
,当您使用apply
方法时,pandas遍历系列的每个成员并将该成员传递给“callable”(也称为函数) ,更多关于这一点,名为dollarGross
。要理解的关键是pandas.Series
的成员是什么。在这种情况下,它们是整数。因此,系列中的每个整数都传递给dollarGross
,并按以下方式调用:
dollarGross(184)
这反过来看起来像这样:
float(184[1:-1])
这没有任何意义。您正在尝试使用[1:-1]
对整数进行下标/切片语法。这就是错误告诉你的:嘿,你不能下标一个整数!
这就是为什么告诉我们你想要做什么很好。因为现在我们可以帮助你做到这一点。记住我说过你可以将“可调用”传递给apply
。好吧,float
是float
个对象类的名称......它也是“可调用的”,因为我们可以执行此操作float(184)
。所以....
df.Gross.apply(float)
应该把事情做好。 然而,这样做可能还是更好
df.Gross.astype(float)
或者,如果df.Gross
的某些成员无法解释为float
值,则使用@ MaxU的答案可能会更好。
答案 2 :(得分:1)
我认为你只需要写dollarGross = lambda x: float(x)
。如果使用方括号,则尝试访问数组。
答案 3 :(得分:0)
我认为您应该使用
分隔列dollarGross = df['Gross'] #I defined a new array to store the Gross Values
print(dollarGross.sum())