genfromtxt dtype = None返回错误的形状

时间:2011-10-01 18:13:02

标签: csv numpy genfromtxt

我是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)

有谁知道为什么它不能将所有这些都读成一维数组?

非常感谢!

1 个答案:

答案 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) 之类的列。