genfromtxt dtype=None返回错误的形状



我是numpy的新手,我很难用genfromext将csv读取到numpy数组中。

我在网上找到了一个CSV文件,我用它作为一个例子。它是float和strings的混合体。在这里:http://pastebin.com/fMdRjRMv

我通过pylab使用numpy(通过:ipypython -pylab在Ubuntu系统上初始化)。Numpy.version.version is 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中,问题是单个列中的所有值必须共享相同的数据类型。由于数据文件的第一行包含列名,这意味着每个列的数据类型都是字符串。

跳过第一行的示例#2的想法是正确的。但是请注意,1.3.0是一个相当旧的版本(我有1.6.1)。在较新的版本中,不推荐使用skiprows,而应该使用skip_header

数组的形状是(373,)的原因是它是一个结构化数组(参见http://docs.scipy.org/doc/numpy/user/basics.rec.html),这是numpy用来表示非均匀数据的。所以data[10]给出了表的一整行。还可以按名称访问数据列,例如data['f10']。您可以在data.dtype.names中找到列的名称。也可以使用在数据文件的第一行中定义的原始列名:

 data = genfromtxt("fMdRjRMv.txt", dtype=None, delimiter=',', names=True)

则可以访问像data['Age']这样的列。

最新更新