【发布时间】:2017-04-05 17:46:55
【问题描述】:
我有一个约 15GB 的大型 CSV 文件,其中包含 180 万列和 5K 行。我需要对文件进行转置,或者是否有一种有效的方法可以逐列读取文件。在 python 2.7、bash 或 Matlab 中寻找时间和内存高效的解决方案。
CSV structure:
column names increment from f0,f1 to f1800000
each row has 1.8 million enteries with value of either 0 or 1.
---------------------------------------
f0,f1,f2 ......... ,f1800000
---------------------------------------
0,0,1 ......... ,0
1,0,1 ......... ,1
.........
---------------------------------------
【问题讨论】:
-
您的规格是什么?尝试使用生成器。
-
1.8*10^6*5000 是 9*10^9 单元格。 15 GB,即每个单元少于 2 个字节。你的数据类型是什么?文件非常稀疏吗?请添加详细规格。
-
我已经更新了这个问题。请检查。
-
一次读取 32 行(每个值是一位),转换为 1,800,000 个无符号整数,写入二进制文件。这样做大约 156 次。编写一个简单的程序,一次从每个文件中读取一个整数的所有 156 个文件,转换为 csv 语法(如果需要,添加行名),将这些行写入最终文件。
-
如果每个值使用一位,则只有 1.125 GB 的数据。你应该能够记住它。将 8 行读入 8 个数组并将其转换为单个字节数组,一个字节代表 8 行单列。重复,直到您将所有数据保存在 625 个数组中。现在循环所有列并将它们作为行写入新文件。
标签: python bash matlab csv large-files