在没有 pandas 的情况下融化一个大数据框

Melt a big data frame without pandas

我有一个 3GB 的数据集,有 40k 行和 60k 列,Pandas 无法读取,我想根据当前索引融化文件。

当前文件如下所示:

第一列是一个索引,我想根据这个索引融化所有文件。 我尝试了pandas和dask,但是在读取大文件时都崩溃了。

你有什么建议吗? 谢谢

您需要使用 pandas 的 chunksize 属性。例如参见 [​​=16=].

您将一次处理 N 行,而不加载整个数据帧。 N 将取决于您的计算机:如果 N 较低,它会占用较少的内存,但会增加 运行 时间并且会占用更多的 IO 负载。

# create an object reading your file 100 rows at a time
reader = pd.read_csv( 'bigfile.tsv', sep='\t', header=None, chunksize=100 )
# process each chunk at a time
for chunk in file:
    result = chunk.melt()
    # export the results into a new file
    result.to_csv( 'bigfile_melted.tsv', header=None, sep='\t', mode='a' )

此外,如果您有整数,则可以将参数 dtype=np.int32 用于 read_csv;如果您不需要精度,则可以使用 dtype=np.float32 来更快地处理数据。

注意:这里有内存使用示例:Using Chunksize in Pandas.