【发布时间】:2016-03-21 13:39:52
【问题描述】:
我在读取 CSV 文件时遇到了 NumPy 1.10.2 的以下问题。我不知道如何为genfromtxt 提供显式数据类型。
这是 CSV,minimal.csv:
x,y
1,hello
2,hello
3,jello
4,jelly
5,belly
这里我尝试用genfromtxt阅读:
import numpy
numpy.genfromtxt('minimal.csv', dtype=(int, str))
我也试过了:
import numpy
numpy.genfromtxt('minimal.csv', names=True, dtype=(int, str))
无论如何,我得到了错误:
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
或者,我尝试过:
import numpy
numpy.genfromtxt('minimal.csv', dtype=[('x', int), ('y', str)])
哪个抛出:
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.
我知道dtype=None 让 NumPy 尝试猜测正确的类型并且通常效果很好。但是,文档提到它比显式类型慢得多。在我的情况下,计算效率是必需的,所以dtype=None 不是一个选项。
我的方法或 NumPy 有什么严重问题吗?
【问题讨论】:
-
我遇到了一个非常相似的问题,我通过将 dtype 作为列表而不是元组来解决了这个问题,您的情况似乎也是如此。
标签: python csv numpy genfromtxt