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

新手上路,请多包涵

我正在尝试在 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)

输出为 elemconcs 分别为:

 ['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 值变成浮点数?

原文由 Dr. Toboggan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 411
2 个回答

float 函数可以这样做:

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

或列表:

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

原文由 RichieHindle 发布,翻译遵循 CC BY-SA 3.0 许可协议

可能对任何人都有帮助,我遇到了类似的问题,我在 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))))

原文由 Yury Wallet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏