[英]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.