2

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

这是一个错误,或者我怎样才能在不丢失第一行的情况下加载数据?

4

3 回答 3

5

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

于 2012-12-07T21:41:51.060 回答
4

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'])
于 2012-10-15T07:40:52.167 回答
2

的默认行为recfromcsv是读取标题行,这就是它跳过第一行的原因。它适用于我genfromtxt(如果我通过delimiter=',')。你能提供显示如何genfromtxt失败的输出吗?

不幸的是,Numpy 中似乎存在一个错误,不允许您在其中指定 dtype recfromcsv(请参阅https://github.com/numpy/numpy/issues/311),所以我看不到如何阅读它指定的列名,我认为您需要这样做以避免阅读标题行。但是您可以使用 读取数据genfromtxt

编辑:看起来你可以通过传入一个名称列表来阅读它:

np.recfromcsv(filename, delimiter=',', names=['a', 'b', 'c'])

(它对我不起作用的原因是我已经完成了from __future__ import unicode_literals,它显然不喜欢 dtypes 中的 unicode。)

于 2012-10-15T07:39:41.430 回答