我是numpy的新手,我很难用genfromtxt将CSV读入一个numpy数组。
我在网上找到了一个我正在使用的CSV文件作为示例。它是浮子和弦的混合物。就在这里:http://pastebin.com/fMdRjRMv
我正在使用numpy通过pylab(通过ipython -pylab在Ubuntu系统上初始化)。 numpy.version.version是1.3.0。
这就是我的所作所为:
示例#1:
data = genfromtxt("fMdRjRMv.txt", delimiter=',', dtype=None)
data.shape
(374, 15)
data[10,10] ## Take a look at an example element
'30'
type(data[10,10])
type 'numpy.string_'
CSV文件中没有错误的引号,所以我不知道为什么它应该认为这个数字是一个字符串。有谁知道为什么会这样?
示例#2(跳过第一行):
data = genfromtxt(“fMdRjRMv.txt”,delimiter =',',dtype = None,skiprows = 1)
data.shape
(373)
有谁知道为什么它不能将所有这些都读成一维数组?
非常感谢!
答案 0 :(得分:7)
在您的示例#1中,问题是单个列中的所有值必须共享相同的数据类型。由于数据文件的第一行具有列名,这意味着每列的数据类型都是字符串。
在跳过第一行的示例#2中,您有正确的想法。但请注意,1.3.0是一个相当旧的版本(我有1.6.1)。在较新版本中,{@ 1}}已弃用,您应该使用skiprows
。
数组的形状为skip_header
的原因在于它是一个结构化数组(参见http://docs.scipy.org/doc/numpy/user/basics.rec.html),这是numpy用于表示非均匀数据的内容。因此(373,)
会为您提供整行表格。您还可以按名称访问数据列,例如data[10]
。您可以在data['f10']
中找到列的名称。也可以使用数据文件第一行中定义的原始列名称:
data.dtype.names
然后您可以访问 data = genfromtxt("fMdRjRMv.txt", dtype=None, delimiter=',', names=True)
之类的列。