【问题标题】:How to format numbers without comma in csv using python?如何使用python在csv中格​​式化不带逗号的数字?
【发布时间】:2017-10-07 18:28:15
【问题描述】:

我得到一个 csv 文件,其中包含从 800 到 3000 的数字。问题是大于千的数字中有逗号,例如1,227 或 1,074 或 2,403。 当我想使用 scipy 或 numpy 计算它们的均值、方差或标准差时,出现错误:ValueError:无法将字符串转换为浮点数:'1,227'。如何将它们转换为数字,以便我可以对它们进行计算。 CSV 文件不应更改,因为它是只读文件。

【问题讨论】:

  • 您没有显示任何代码。有很多方法可以做到这一点,具体取决于您在阅读 csv 时的实际方法
  • 这不是格式问题,而是阅读问题 - 如何将 csv 加载到数组中。 stackoverflow.com/questions/6633523/…replacelocale 解决方案。
  • 写一个不带逗号的新版本文件怎么样? tr -d ',' < originalFile.csv > noCommas.csv?
  • my_string=[val[2] for val in csvfile] my_float=[float(my_string.replace(',', '')) for i in my_string)] 这就是我想要的做。所以 my_string 有字符串列表。例如带逗号的数字。我正在尝试转换为可以替换的 my_float 。由于它是字符串列表,因此此代码不起作用。

标签: python csv numpy string-formatting number-formatting


【解决方案1】:

谢谢各位!我使用替换功能修复了它。 hpaulj 的链接很有用。

my_string=[val[2] for val in csvtext]
my_string=[x.replace(',', '') for x in my_string]
my_float=[float(i) for i in my_string]

这是代码,其中,第一行将 csv 字符串列表加载到 my_string,第二行删除逗号,第三行生成易于计算的数字。因此,无需编辑文件或创建新文件。只需一个列表操作就可以完成这项工作。

【讨论】:

    【解决方案2】:

    这确实是一个locale 问题,但一个简单的解决方案是先简单地在字符串上调用replace

    a = '1,274'
    float(a.replace(',',''))  # 1274.0
    

    另一种方法是使用pandas 读取csv 文件。它的read_csv 函数有一个thousands 参数。

    如果您对语言环境有所了解,那么最好使用locale.atof() 函数

    【讨论】:

    • 如果您使用 numpy 读取 CSV,甚至是基本 CSV 模块,则不会。您需要 OP 的澄清以希望回答这个问题。
    • 我同意。问题不是很清楚。但是,ValueError 消息确实表明他正在将数字作为字符串处理。
    • 那就不要急于求成。首先要求澄清。声望增益是次要的提供有用的东西。
    • 我发现了一个老问题,基本上给出了这两个答案。但是如果pandas 可用,那么我会使用它。
    猜你喜欢
    • 2019-11-17
    • 2020-07-11
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2011-05-21
    相关资源
    最近更新 更多