在没有 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.
我有一个 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.