【问题标题】:Error Converting Pandas Dataframe to float with comma将 Pandas 数据框转换为带逗号的浮点数时出错
【发布时间】:2018-06-25 00:40:57
【问题描述】:

所以我得到了一个数据框,其中至少有 2-3 列,数字从 1 到 3000, 并且数字有逗号。我需要将所有相关列中的数字转换为浮点数或整数。这是我的数据框的示例:

data = pd.read_csv('exampleData.csv')
data.head(10)
 Out[179]:
 Rank     Total
  1         2
  20        40
  1,200    1,400
  NaN       NaN

从示例中可以看出,我的 Dataframe 由数字、带逗号的数字和一些 NaN 组成。我在这里阅读了几篇关于转换为 float 或 int 的帖子,但我总是收到错误消息,例如:'str'对象没有属性“astype”。 对于几列,我的方法如下:

cols = ['Rank', 'Total']
data[cols] = data[cols].apply(lambda x: pd.to_numeric(x.astype(str)
                                               .str.replace(',',''), errors='coerce'))

【问题讨论】:

  • 刚刚尝试运行您的代码,它在这里完美运行。
  • 每一列的dtype是什么?
  • dtype 是对象。也许这就是问题所在?

标签: python pandas dataframe


【解决方案1】:

使用参数thousands

pd.read_csv('exampleData.csv', thousands=',')

【讨论】:

    【解决方案2】:

    John 的解决方案不适用于包含多个逗号的数字,例如 1,384,496。

    一个更具可扩展性的解决方案是做

    data = data.replace({",":""}, regex=True)

    然后将字符串转换为数字。

    【讨论】:

    • 我做了这部分,但是当我尝试更改为数字时,我仍然收到错误消息。我检查了这些列,它们是“对象”类型的
    【解决方案3】:

    Pandas read_csv() 接受许多参数,允许您控制字段的转换方式。来自the documentation

    decimal : str, default ‘.’
        Character to recognize as decimal point (e.g. use ‘,’ for European data).
    

    所以,这是一个疯狂的想法:使用关键字参数“decimal = ','”转换数字字段。然后,将数值字段乘以 1000。

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多