我是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']
这样的列。