繁体   English   中英

从numpy.genfromtxt()中排除

[英]Exclude from numpy.genfromtxt()

我必须将大型逗号分隔的表格导入为numpy数组。 因此,我正在使用genfromtxt来这样做。 但是,我遇到了那些表,它们在括号中都包含“ foo,bar”形式的元素,我什至不需要。 在导入期间,numpy会引发一个错误,即列数不一致,因为它将这些元素识别为两个单独的条目。 如何在不知道这些条目位于何处的情况下避免这种情况。 并且如果不可能,是否有办法从导入中显式排除某些列,这些列可能包含这些值? 我知道usecols,但我要相反。 另外,usecols可能也会错误地计算列数,因此排除将无法通过这种方式进行。

'invalid_raise'参数可能会有所帮助:

invalid_raise : bool, optional
    If True, an exception is raised if an inconsistency is detected in the
    number of columns.
    If False, a warning is emitted and the offending lines are skipped.

如果为False文件至少应加载。

但是,如果仍然需要使用有问题的行,则需要其他方法。

如果所有数据字段都对齐,则delimited的列宽版本可能会起作用。


genfromtxt接受生成器作为输入-也就是说,该函数可以一次向其馈送一行。

使用re函数清除输入源中的(foo,bar)字符串的示例:

def foo(astr):
    # replace (foo,bar) with (foo:bar)
    return re.sub(r'\(([^,]*)(,)([^,]*)\)',r'(\1:\3)',astr)
txt = 'foo,2,3\n(foo,bar),5,6\nbar,8,9\n'
txt = txt.splitlines()
np.genfromtxt((foo(i) for i in txt),delimiter=',',dtype=None)

生产:

array([('foo', 2, 3), ('(foo:bar)', 5, 6), ('bar', 8, 9)], 
  dtype=[('f0', 'S9'), ('f1', '<i4'), ('f2', '<i4')])

或从文件

with open('stack27383639.txt') as f:
    F=np.genfromtxt((foo(l) for l in f),dtype=None,names=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM