【问题标题】:Python: Convert string (in scientific notation) to floatPython:将字符串(科学计数法)转换为浮点数
【发布时间】:2014-07-01 10:30:04
【问题描述】:

我正在尝试在 numpy 中使用 genfromtxt 导入一个包含文本和数字的大型 .csv 文件。我只对两列感兴趣。我已经整理了大部分导入:

def importfile(root):
    data = root.entry.get()
    atw = np.genfromtxt(data, delimiter=",",
                        skip_header=1,
                        skip_footer=2,
                        autostrip=True,
                        usecols=(25,26),
                        dtype=("|S10"))
    elem = atw[:,0]
    concs = atw[:,1]

    print(elem)
    print(concs)

分别为 elem 和 concs 输出:

['Na2O' 'MgO' 'Al2O3' 'SiO2' 'P2O5' 'SO3' 'Cl' 'K2O' 'CaO' 'TiO2' 'Cr2O3'
'MnO' 'FeO' 'NiO' 'Cu2O' 'ZnO' 'Ga2O3' 'SrO' 'Y2O3']

['3.76E+00' '1.31E+01' '1.14E+01' '4.04E+01' '1.24E+00' '5.89E-02'
'2.43E-02' '1.53E+00' '1.49E+01' '2.87E+00' '6.05E-02' '1.96E-01'
'1.17E+01' '3.69E-02' '8.73E-03' '1.39E-02' '1.93E-03' '1.88E-01'
'5.58E-03']

我尝试了许多不同的方法来将 concs 字符串转换为浮点数,但它似乎不喜欢 concs 采用科学记数法这一事实......是否存在将 concs 值转换为的方法一个浮子?提前感谢您的支持。

【问题讨论】:

    标签: string csv floating-point data-conversion genfromtxt


    【解决方案1】:

    float 函数可以做到这一点:

    >>> float('1.31E+01')
    13.1
    

    或列表:

    >>> map(float, ['3.76E+00', '1.31E+01', '1.14E+01'])
    [3.76, 13.1, 11.4]
    

    【讨论】:

    • 强制列表理解方法:n = ['3.76E+00', '1.31E+01', '1.14E+01'] [float(i) for i in n]
    • float(i) 对我不起作用。我有一个混合列表,我想转换它。如果不想拆分,不知道应该使用什么。
    【解决方案2】:
     with open( datafile,'r' ) as inData:
         for line in inData:
              j = list( map( float,   filter( None  , [ x for x in line.strip().split(',') ] )) )
    

    只是一般性地提到,因为它解决了一个类似的问题,让我来到了这个页面。

    【讨论】:

      【解决方案3】:

      也许这对任何人都有帮助,我遇到了类似的问题,我在 stackoverflow 上发现了关于将 pandas to_numeric 应用于 DataFrame 列,包括用点替换逗号

      import re
      import pandas as pd
      atw[cc] = pd.to_numeric(atw[cc].apply(lambda x: re.sub(',', '.', str(x))))
      

      【讨论】:

        【解决方案4】:

        有了这样的科学记数法列表,你也可以这样做:

        1. a = [9.0181446e-01, 1.3179450e-02, 4.3021311e-04, 2.3546994e-03, 3.6531375e-03, 7.8567989e-02]
        2. max(a)
        

        输出将为:0.90181446

        【讨论】:

          猜你喜欢
          • 2020-06-10
          • 1970-01-01
          • 2010-09-09
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 2014-09-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多