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

时间:2012-10-15 07:09:45

标签: python numpy io scipy

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

这是一个错误,或者如何在不丢失第一行的情况下加载数据?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

csv文件的默认第一行包含字段名称。 函数recfromcsv调用genfromtxt作为默认参数names=True。这意味着它将数据的第一行读作标题。

定义: 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'])

答案 2 :(得分:1)

recfromcsv的默认行为是读取标题行,这就是它跳过第一行的原因。它适用于genfromtxt(如果我通过delimiter=',')。你能提供显示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并且显然不喜欢dtypes中的unicode。)