2014-05-13 6 views
11

Ich versuche, eine große .csv-Datei mit Text und Zahlen mit genfromtxt in numpy zu importieren. Ich bin nur an zwei Spalten interessiert. Ich habe die meisten der Import aussortiert mit:Python: Konvertieren Zeichenfolge (in wissenschaftlicher Notation) in float

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) 

Mit Ausgang für Elem und CONCS jeweils:

['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'] 

ich viele verschiedene Dinge zur Umwandlung der CONCS String in einem Schwimmer versucht, aber es doesn Ich mag die Tatsache nicht, dass die Concs in wissenschaftlicher Notation sind ... gibt es eine Möglichkeit, die concs-Werte in einen Float zu verwandeln? Danke im Voraus für deine Unterstützung.

Antwort

14

Die float Funktion kann dies tun:

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

oder für eine Liste:

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

Obligatorische Liste Verständnis Ansatz: 'n = ['3.76E + 00', '1.31E + 01', '1.14E + 01'] [float (i) für i in n]' –

+0

float (i) gewonnen arbeite nicht für mich. Ich habe eine gemischte Liste und möchte sie konvertieren. Nicht sicher, was ich verwenden soll, wenn ich es nicht teilen will. –

0
with open(datafile,'r') as inData: 
    for line in inData: 
      j = list(map(float, filter(None , [ x for x in line.strip().split(',') ]))) 

nur allgemein erwähnt, da es ein ähnliches Problem löst, das mich dazu gebracht Seite.

Verwandte Themen