【问题标题】:How to strip and convert string to float (decimals)?如何剥离字符串并将其转换为浮点数(小数)?
【发布时间】:2019-04-23 20:45:06
【问题描述】:

我正在尝试将类似于“8,191.55 MB”的字符串转换为“8191.55” 这样我就可以将它除以 1024 得到 GigaBytes。

我正在尝试的代码给了我“819155”而不是“8191.55”

代码:

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = (int)(''.join(i for i in TotalRAM if i.isdigit()))

【问题讨论】:

  • 您的 join 语句正在去掉小数位。您可能需要考虑用“”替换所有非数字字符,然后进行浮点转换。此外,您想使用浮点数,而不是整数。 Int 将四舍五入到最接近的整数并去掉小数位。
  • 在这种情况下您可以绕过它,但通常您可能需要查看正则表达式:docs.python.org/3/library/re.html

标签: python python-3.x string dataframe floating-point


【解决方案1】:

使用replace() 去掉逗号值,使用split() 将其分成几部分。 split 函数也会去掉前导和尾随空格。

RAM = ' 8,191.55 MB '
ram_in_MB = float(RAM.replace(',','').split()[0])
print(ram_in_MB)
# 8191.55

【讨论】:

    【解决方案2】:

    鉴于您拥有的代码,我会选择

    TotalRAM = dfHandler['Total Physical Memory'].values[0]
    TotalRAM = float(''.join(i for i in TotalRAM if (i.isdigit() or i == ".")))
    

    【讨论】:

      【解决方案3】:
      TotalRAM = dfHandler['Total Physical Memory'].values[0]    
      TotalRAM = float(TotalRAM.replace(',', '').replace(' MB', ''))
      TotalRAMGb = TotalRam / 1024
      

      【讨论】:

        【解决方案4】:

        我会使用正则表达式 (re) 来提取字符串的数字部分。它将获得数字 (d+) 和小数 (.)。

        import re
        num = re.findall("(\d+(?:\.\d+)?)", "8,191.55 MB")
        print(float(''.join(num)))
        

        结果:

        8191.55
        

        【讨论】:

        • 您的正则表达式错误 - 没有考虑逗号或不带小数的数字
        • 你不需要逗号,因为 float 不接受逗号。我编辑了我的答案来处理整数值。谢谢。
        【解决方案5】:

        更本地化的方法怎么样:

        from locale import setlocale, LC_NUMERIC, atof
        setlocale(LC_NUMERIC, '')
        
        # ...
        
        TotalRAM = dfHandler['Total Physical Memory'].values[0]
        TotalRAM = atof(TotalRAM.split()[0])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-25
          • 2013-11-04
          • 1970-01-01
          • 2018-02-15
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多