【问题标题】:Pandas, converting columns to integer, invalid literal for int() with base 10熊猫,将列转换为整数,int() 的无效文字,基数为 10
【发布时间】:2021-11-25 15:40:26
【问题描述】:

.dtypes 显示“金额”列默认是一个对象

所以我尝试了这个,

df['Amount'] = df['Amount'].astype(int)

我收到了这个错误,

ValueError: invalid literal for int() with base 10: '3,448.91'

【问题讨论】:

  • 用您自己的话来说,鉴于'3,448.91' 出现在列中,您认为int 的结果应该是什么?为什么?用你自己的话来说,int 是什么意思?
  • 这是一个将值转换为整数的函数
  • 用你自己的话说,什么是整数?

标签: python python-3.x pandas


【解决方案1】:

问题是您的列包含逗号 (,)。先将其替换为空字符串,然后将类型转换为int

df['Amount'] = df['Amount'].str.replace(',', '').astype(float)

如果您想将值四舍五入并转换为int,请执行以下操作:

df['Amount'] = df['Amount'].str.replace(',', '').astype(float).round().astype(int)

【讨论】:

  • 这不会解决问题,因为'3448.91' 仍然无法转换为整数。 OP 可能想要两件事:改为转换为float,或者根据某些规则将值舍入或截断为整数。在问题得到解决之前,不应回答该问题。
  • 我投了反对票,因为我知道你仍然会收到那个错误。
  • @Pythonaccount 现在试试答案。
  • @KarlKnechtel 请检查我更新的答案。我已经处理了你指出的两种情况。
  • @Mayank Porwal 我一定是在做一些非常愚蠢的事情。上面的第一行错误为“AttributeError: Can only use .str accessor with string values!”。但是,如果我改为创建一个新列而不是覆盖 Amount,则 df['New_Amount'] = .... 它工作正常。
猜你喜欢
  • 1970-01-01
  • 2019-01-02
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2018-03-13
  • 1970-01-01
  • 2021-06-25
相关资源
最近更新 更多