【问题标题】:How can I parse a string number to a float python如何将字符串数字解析为浮点 python
【发布时间】:2021-12-24 04:56:23
【问题描述】:

从 excel 我有一个以下类型的数字:“22.024.833,02”,所以我一直在尝试 .strip()、.replace() 等,但我无法从我的代码中获得浮点数.

for columna, fila in mav.iterrows():
    comitente = fila['Comit.']
    moneda = fila['Especie']
    m = fila['Operado'].strip()
    m2 = m.replace('.', '')
    monto = float(m2)
    

结果:monto = float(m2) ValueError:无法将字符串转换为浮点数:'22024833,02'

【问题讨论】:

  • '22.024.833,02'.replace('.','').replace(',','.')
  • @Renat,看起来 OP 使用点来分隔数字,用逗号来分隔小数点,所以答案不太准确。
  • @CoffeeTableEspresso,它仍然是本地化格式的数字,该问题已解决
  • @Renat 你是对的,我在看那个问题时没有看到最初处理这个问题的答案

标签: python


【解决方案1】:

我的回答是假设您使用. 作为数字分隔符,使用, 作为小数点。

m = fila['Operado'].strip()    # m = "22.024.833,02"
m = m.replace('.', '')         # m = "22024833,02"
m = m.replace(',', '.')        # m = "22024833.02"
monto = float(m)               # monto = 22024833.02

Python 的 float 不需要数字分隔符(您的示例中为 .),小数点为 .(不是您输入中的 ,)。

【讨论】:

  • 答案是关于 string->float 转换,而不是从 csv 文件的行中获取单个字符串。顺便说一句,我发现阅读代码旁边的 cmets 非常有用,可以更好地理解 OP 的真正要求。 +1
  • @FLAK-ZOSO 你说得对,从文件中读取根本不重要,我只是以这种方式格式化它以与 OPs 帖子中的内容保持一致。
【解决方案2】:

我想这就是你要找的东西

m = float(fila['Operado'].strip().replace(".","").replace(",","."))

小数部分最好使用.,整数部分最好使用,

【讨论】:

  • 我也试过用“,”替换“。”但它没有工作,我又试了一次,它工作了!感谢你们的cmets,谢谢你们!!!
【解决方案3】:

在 Python 中,您应该使用 . 而不是 , 作为小数点分隔符。

good_float = 1.44
not_a_float = 1,22 # This will be stored as a tuple

如果你的输入字符串用,作为小数分隔符,你可以使用String.replace()方法。

>>> '3,14'.replace(',', '.')
'3.14'

如果你也使用.作为数字分隔符,你可以用同样的方法替换它。

>>> '1.203,14'.replace('.', ' ').replace(',', '.')
'1203,14'

然后您可以使用float 内置函数将字符串精细地转换为浮点数。

>>> float('3,14'.replace('.', ' ').replace(',', '.'))
3.14

请记住始终在.replace(',', '.') 之前写.replace('.', ' '),以避免与句号混淆。


您的代码现在应该可以工作了:

>>> float(fila['Operado'].strip().replace('.', ' ').replace(',', '.'))

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2015-03-15
    • 2020-08-30
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多