我正在尝试使用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字符串转换为float,但它似乎不喜欢concs是科学记法的事实....是否存在将concs值转换为一个漂浮?在此先感谢您的支持。
答案 0 :(得分:17)
float
功能可以执行此操作:
>>> float('1.31E+01')
13.1
或列表:
>>> map(float, ['3.76E+00', '1.31E+01', '1.14E+01'])
[3.76, 13.1, 11.4]
答案 1 :(得分:0)
with open( datafile,'r' ) as inData:
for line in inData:
j = list( map( float, filter( None , [ x for x in line.strip().split(',') ] )) )
刚才提到,因为它解决了一个类似的问题,让我进入了这个页面。
答案 2 :(得分: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))))
答案 3 :(得分:0)
有了这样的科学符号列表,您还可以这样做:
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