使用numpy.genfromtxt从文件读取数据时跳过行

3

我有一个数据集文件,如下所示:

A 1
B 2
C 3
A 4
B 5
C 6

我想提取只包含'A'的行。如何使用numpy.genfromtxt做到这一点?是否有其他在Numpy中可以帮助我完成同样任务的函数可用?

3个回答

7

numpy.genfromtxt可以接受生成器,因此您可以将genfromtextifilter链接在一起:

from itertools import ifilter
with open(fname, 'rb') as inp:
     filtered_inp = ifilter(lambda x: x.startswith('A'), inp)
     a = np.genfromtxt(filtered_inp)

谢谢@alko :) 这应该比从文件中读取所有数据快一点。我希望numpy将来能够推出直接实现。 - Andy Stow Away

2
您可以先读取整个文件,然后使用高级索引进行过滤:
a = np.genfromtxt('test.txt', dtype=str)

check = (a[:,0]=='A')
a = a[check]

1
我也想要这个功能,但它并不存在。因此,现在你可能只能将整个文件加载为矩阵,然后使用高级索引来对其进行子集化,或删除不需要的部分等等。如果你实际上想要的行数很小,而总大小非常大,那么你甚至最好只是以常规Python方式遍历行。

嗯,我明白了。好吧,我需要的行数非常多。目前我正在加载整个文件。 - Andy Stow Away
那么,除非有人为NumPy编写补丁,否则您现在拥有的可能已经是最好的了。 - John Zwinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接