Python:将字符串(科学计数法)转换为浮点数

Dr.*_*gan 19 csv string floating-point data-conversion genfromtxt

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

分别输出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']
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多不同的东西,用于将concs字符串转换为float,但它似乎不喜欢concs是科学记数法的事实....是否存在将concs值转换为float的方法?在此先感谢您的支持.

Ric*_*dle 22

float功能可以这样做:

>>> float('1.31E+01')
13.1
Run Code Online (Sandbox Code Playgroud)

或列表:

>>> map(float, ['3.76E+00', '1.31E+01', '1.14E+01'])
[3.76, 13.1, 11.4]
Run Code Online (Sandbox Code Playgroud)

  • 强制列表理解方法:`n = ['3.76E + 00','1.31E + 01','1.14E + 01'] [float(i)for i in n]` (2认同)