3

我是 numpy 的新手,并且很难使用 genfromtxt 将 CSV 读取到 numpy 数组中。

我在网上找到了一个 CSV 文件,用作示例。它是浮点数和字符串的混合体。在这里: http: //pastebin.com/fMdRjRMv

我正在通过 pylab 使用 numpy(通过: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)

数据形状

(373,)

有谁知道为什么它不会将所有这些读入一维数组?

非常感谢!

4

1 回答 1

8

在您的示例 #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']

于 2011-10-02T16:39:12.717 回答