genfromtxt dtype = None返回错误的形状

Dan*_*ans 2 csv numpy genfromtxt

我是numpy的新手,我很难将CSV读入带有genfromtxt的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_'
Run Code Online (Sandbox Code Playgroud)

CSV文件中没有错误的引号,所以我不知道为什么它应该认为该数字是一个字符串.有谁知道为什么会这样?

示例#2(跳过第一行):

data = genfromtxt("fMdRjRMv.txt",delimiter =',',dtype = None,skiprows = 1)

data.shape

(373)

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

非常感谢!

dep*_*ted 7

在您的示例#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)
Run Code Online (Sandbox Code Playgroud)

然后你可以访问像这样的列data['Age'].