ich in das folgende Problem lief 1.10.2 mit NumPy wenn einer CSV-Datei zu lesen. Ich kann nicht herausfinden, wie man explizite Datentypen genfromtxt
gibt. HierNumPy: Mismatch in der Größe des alten und neuen Daten-Descriptor
ist die CSV, minimal.csv
:
x,y
1,hello
2,hello
3,jello
4,jelly
5,belly
Hier versuche ich, es zu lesen, mit genfromtxt:
import numpy
numpy.genfromtxt('minimal.csv', dtype=(int, str))
ich auch versucht:
import numpy
numpy.genfromtxt('minimal.csv', names=True, dtype=(int, str))
Wie auch immer, ich bekommen Fehler:
Traceback (most recent call last):
File "visualize_numpy.py", line 39, in <module>
numpy.genfromtxt('minimal.csv', dtype=(int, str))
File "/Users/xeli/workspace/myproj/env/lib/python3.5/site-packages/numpy/lib/npyio.py", line 1518, in genfromtxt
replace_space=replace_space)
File "/Users/xeli/workspace/myproj/env/lib/python3.5/site-packages/numpy/lib/_iotools.py", line 881, in easy_dtype
ndtype = np.dtype(ndtype)
ValueError: mismatch in size of old and new data-descriptor
Alternativ habe ich versucht:
import numpy
numpy.genfromtxt('minimal.csv', dtype=[('x', int), ('y', str)])
Welche wirft:
Traceback (most recent call last):
File "visualize_numpy.py", line 39, in <module>
numpy.genfromtxt('minimal.csv', dtype=[('x', int), ('y', str)])
File "/Users/xeli/workspace/myproj/env/lib/python3.5/site-packages/numpy/lib/npyio.py", line 1834, in genfromtxt
rows = np.array(data, dtype=[('', _) for _ in dtype_flat])
ValueError: size of tuple must match number of fields.
I bekannt dtype=None
macht NumPy zu versuchen richtigen Typen zu erraten, und in der Regel gut funktioniert. Die Dokumentation erwähnt jedoch, dass es viel langsamer als explizite Typen ist. In meinem Fall ist die Recheneffizienz erforderlich, so dass dtype=None
keine Option ist.
Gibt es etwas schrecklich falsch mit meinem Ansatz oder NumPy?
Ich hatte ein sehr ähnliches Problem, das ich löste, indem ich den dtype als eine Liste anstelle eines Tupels gab, und es scheint dasselbe für Ihren Fall zu sein. – pela