numpy的recfromcsv和genfromtxt跳过数据文件的第一行

3
numpy的recfromcsv跳过了我的数据的第一行。(genfromtxt也是同样的情况)
import numpy as np

filename = 'data.csv'
writer = open(filename,mode='w')
writer.write('0,1.1,1.2\n1,2.1,2.2\n2,3.1,3.2')
writer.close()

data = np.recfromcsv(filename)
print data

这是一个bug吗?还是有什么方法可以在不丢失第一行的情况下加载数据?

3个回答

6
默认情况下,csv文件的第一行包含字段名称。函数recfromcsv默认使用参数names=True调用genfromtxt函数,这意味着它会将数据的第一行读取为标题。请确保在数组之前编写此内容。
定义: http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html
import numpy as np

filename = 'data.csv'
writer = open(filename,mode='w')
writer.write('first column,second column,third column\n')
writer.write('0,1.1,1.2\n1,2.1,2.2\n2,3.1,3.2')
writer.close()

data = np.recfromcsv(filename)
print data

您可以使用recfromtxt代替recfromcsv

或者将默认名称覆盖为

recfromcsv(filename, names=['a','a','a'])

1
在我的情况下,数据文件格式是固定的 - 但是给出名称就可以解决问题。(请注意,在您的代码中有一个额外的引号:应该是recfromcsv(filename,names = ['a','a','a']) - det

5
您可以添加skiprow=0来防止recfromcsv跳过第一行。

2
recfromcsv的默认行为是读取标题行,这就是它跳过第一行的原因。如果我传递delimiter=',',则使用genfromtxt对我有效。你能提供一个输出,显示genfromtxt的失败情况吗?
不幸的是,似乎Numpy中存在一个错误,不允许您在recfromcsv中指定dtype(请参见https://github.com/numpy/numpy/issues/311),因此我无法看到如何使用指定的列名读取它,我认为这是您需要避免读取标题行的方法。但是,您可以使用genfromtxt读取数据。
编辑:看起来您只需传入名称列表即可读取它。
np.recfromcsv(filename, delimiter=',', names=['a', 'b', 'c'])

(原因是我使用了from __future__ import unicode_literals,它似乎不喜欢在数据类型中使用Unicode,所以它对我不起作用。)

如果您想将结果保留为结构化数组,其中第一列为整数,其他列为浮点数,就像从“recfromcsv”中获取的那样,您也可以指定关键字“dtype = None”。 - joris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接