簡體   English   中英

將字符串(科學計數法)轉換為浮點數

[英]Convert string (in scientific notation) to float

我正在嘗試在 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值轉換為浮點數?

float函數可以做到這一點:

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

或列表:

>>> map(float, ['3.76E+00', '1.31E+01', '1.14E+01'])
[3.76, 13.1, 11.4]
 with open( datafile,'r' ) as inData:
     for line in inData:
          j = list( map( float,   filter( None  , [ x for x in line.strip().split(',') ] )) )

剛剛提到過,因為它解決了一個類似的問題,讓我來到了這個頁面。

也許這對任何人都有幫助,我遇到了類似的問題,我在 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))))

擁有這樣的科學記數法列表,您也可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM