使用numpy.genfromtxt()的辅助函数

时间:2014-01-07 09:30:43

标签: python arrays numpy

我想将数据从文件myfile读入数组,该数组在开头包含一个我打算忽略的字符串。这样的事情: -

"myfile", 1.0, 2.0, 3.0
,4.0, 5.0, 6.0

这是代码: -

def func(filename):
    with open(filename) as fp
    line = next(fp).split(',')
    yield ','.join(line[1:])
    for line in fin:
        yield line

arr = np.genfromtxt(func('myfile'), delimiter=',')

我得到一个例外: -

Line #2 (got 4 columns instead of 3)

我觉得奇怪的是,如果我的数据看起来像这样,

"myfile", 1.0, 2.0, 3.0, 4.0 
 ,5.0, 6.0, 7.0

我得到了

array([[  1.,   2.,   3.,   4.],
   [ nan,   4.,   5.,   6.]])

有人能解释一下这里发生了什么吗?

2 个答案:

答案 0 :(得分:1)

对我来说,在修正拼写错误后,它可以正常工作:

import numpy as np

def func(filename):
    with open(filename) as fp:
        line = next(fp).split(',')
        yield ','.join(line[1:])
        for line in fp:
            yield line[1:]

print np.genfromtxt(func('myfile'), delimiter=',')

myfile

"myfile", 1.0, 2.0, 3.0
,4.0, 5.0, 6.0

答案 1 :(得分:0)

第二行的前导逗号是导致此行为的原因。 genfromtxt期望那里有另一个值,如果没有,则替换nan。所以第二行根据genfromtxt有4个值。如果同样适用于你的第一行,那就没关系;但genfromtxt需要一个方形的输入块,采用行/列类型格式。你可以做的一件事是用一个额外的前导逗号替换要删除的字符串,将字符串呈现为nans;如果这确实确实使您的数据平方。如果没有,那么最好的方法就是取决于你的数据实际上是什么样的。