2017-05-15 2 views
1

Ich versuche convert-Funktion zu verwenden String zu konvertieren zu schweben, ich python3.6 verwenden:verdeckte Fehler für loadtxt Funktion

die Funktion ist:

def datatype(s): 
    it={'N':0,'L':1,'H':2} 
    return float(it[str(s.strip(), 'utf-8')]) 

Meine Daten here

ist, wenn ich versuche, die Datei zu laden:

d2=np.loadtxt(path2, delimiter=',', skiprows=1, converters={1: datatype, 2:datatype,3:datatype,4:datatype,5:datatype,6:datatype}) 

es gib mir Fehler:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 930, in loadtxt 
items = [conv(val) for (conv, val) in zip(converters, vals)] 
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 930, in <listcomp> 
items = [conv(val) for (conv, val) in zip(converters, vals)] 
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 659, in floatconv 
return float(x) 
ValueError: could not convert string to float: b'L ' 

aber ich kann Zeichenfolge manuell konvertieren,

>>> datatype(b'L ') 
1.0 

Wie Funktion zu schreiben, konvertiert es keinen Fehler machen?

Antwort

1

Es gibt 8 Spalten in der gegebenen csv. Sie sollten 8. Konverter bieten:

d2 = np.loadtxt(path2, delimiter=',', skiprows=1, converters={ 
    1: datatype, 2: datatype, 3: datatype, 4: datatype, 
    5: datatype, 6: datatype, 7: datatype, 
}) 

ODER

d2 = np.loadtxt(path2, delimiter=',', skiprows=1, 
       converters=dict.fromkeys(range(1, 8), datatype)) 
Verwandte Themen