【问题标题】:Best way to transpose a grid of data in a file在文件中转置数据网格的最佳方法
【发布时间】:2009-10-15 02:20:14
【问题描述】:

我在 2D 网格上有大型数据文件。 它们的组织方式使得网格中的后续数据行是文件中的后续行。 每列由制表符分隔。 本质上,这是一个 CSV 文件,但使用选项卡而不是列。

我需要转置数据(第一行成为第一列)并将其输出到另一个文件。最好的方法是什么?任何语言都可以(我更喜欢使用 Perl 或 C/C++)。目前,我的 Perl 脚本只是将整个文件读入内存,但我的文件非常庞大。

【问题讨论】:

  • “巨大”是什么意思? 1GB、100GB、1TB?

标签: csv transpose data-processing tsv


【解决方案1】:

最简单的方法是对您的输入进行多次传递,在每次传递时提取列的子集。列数取决于您要使用多少内存以及输入文件中有多少行。

例如:

在第 1 步中,您读取整个输入文件并仅处理前 10 列。如果输入有 100 万行,则输出将是一个有 100 万列和 10 行的文件。在下一次通过时,您将再次读取输入,并处理第 11 到 20 列,将结果附加到原始输出文件中。等等……

【讨论】:

    【解决方案2】:

    如果你安装了带有 NumPy 的 Python,就这么简单:

    #!/usr/bin/env python
    
    import numpy, csv
    
    with open('/path/to/data.csv', 'rb') as file:
        csvdata = csv.reader()
    
    data = numpy.array(csvdata)
    transpose = data.T
    

    ...csv 模块是 Python 标准库的一部分。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多