Skip to main content
 首页 » 编程设计

python之“int”对象不可订阅。 Pandas

2025年05月04日15yyy_WW

我有数据集 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 

我错过了什么?

请您参考如下方法:

你的错误从这里开始:

df.Gross.apply(dollarGross) 

df.Gross 是一个 pandas.Series,当您使用 apply 方法时,pandas 遍历该系列的每个成员并通过该成员到名为 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 的答案可能会更好。