【问题标题】:Skip rows when reading data from file using numpy.genfromtxt使用 numpy.genfromtxt 从文件中读取数据时跳过行
【发布时间】:2013-11-30 13:14:20
【问题描述】:

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

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

我只想提取包含'A' 的行。我如何使用numpy.genfromtxt 做到这一点? numpy 中是否还有其他功能可以帮助我做同样的事情?

【问题讨论】:

    标签: python arrays file numpy io


    【解决方案1】:

    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 将来能直接实现
    【解决方案2】:

    您可以阅读整个文件,然后使用精美的索引进行过滤:

    a = np.genfromtxt('test.txt', dtype=str)
    
    check = (a[:,0]=='A')
    a = a[check]
    

    【讨论】:

      【解决方案3】:

      我也想要这个功能,但它不存在。因此,现在您可能应该将整个文件加载为矩阵,然后使用花哨的索引对其进行子集化,或删除您不想要的部分,等等。如果您实际需要的行数非常少且总大小非常大,您最好以常规 Python 方式遍历这些行。

      【讨论】:

      • 嗯,我明白了。那么我想要的行数非常大。我目前正在加载整个文件。
      • 那么在有人为 NumPy 编写补丁之前,您现在所拥有的可能已经是最好的了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多