【问题标题】:'int' object is not subscriptable. Pandas'int' 对象不可下标。熊猫
【发布时间】:2017-05-26 16:25:05
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • x[1:-1] 在你的 lambda 函数中应该做什么?在我看来,您正在尝试对整数列进行字符串操作......如果是这种情况,那么您可能可以直接执行df.Gross.sum()
  • 我认为既然我正在访问 csv 文件,所有列都是字符串

标签: python pandas int


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的错误从这里开始:

      df.Gross.apply(dollarGross)
      

      df.Gross 是一个pandas.Series 并且当您使用apply 方法时,pandas 会遍历该系列的每个成员并将该成员传递给“可调用”(也称为函数,更多信息请参见位)命名为dollarGross。要了解的关键是pandas.Series 的成员是什么。在这种情况下,它们是整数。所以系列中的每个整数都被传递给dollarGross 并被这样调用:

      dollarGross(184)
      

      这又看起来像这样:

      float(184[1:-1])
      

      这没有任何意义。您正在尝试使用[1:-1],它是整数的下标/切片语法。这就是错误告诉您的内容:嘿,您不能为整数下标!


      这就是为什么最好告诉我们您要做什么。因为现在我们可以帮助您做到这一点。请记住,我说过您可以将“可调用”传递给apply。好吧,floatfloat 对象的类的名称......它也是一个“可调用的”,因为我们可以这样做 float(184)。所以....

      df.Gross.apply(float)
      

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

      df.Gross.astype(float)
      

      或者,如果df.Gross 的某些成员无法解释为float 值,则使用@MaxU 的答案可能会更好。

      【讨论】:

        【解决方案4】:

        我认为您应该使用

        分隔列
        dollarGross = df['Gross'] #I defined a new array to store the Gross Values 
        print(dollarGross.sum())
        

        【讨论】:

          猜你喜欢
          • 2023-03-21
          • 1970-01-01
          • 1970-01-01
          • 2021-03-04
          • 2018-07-13
          • 2017-07-15
          • 2021-11-26
          • 2012-02-21
          • 2018-08-07
          相关资源
          最近更新 更多