gpt4 book ai didi

python - 加速 Pandas 稀疏数据帧的加载

转载 作者:行者123 更新时间:2023-12-01 04:47:16 25 4
gpt4 key购买 nike

我生成了一个大型 pickle 稀疏数据帧,但由于它太大而无法保存在内存中,因此我必须在生成它时增量追加,如下所示:

with open(data.pickle, 'ab') as output:
pickle.dump(df.to_sparse(), output, pickle.HIGHEST_PROTOCOL)

然后为了读回文件,我执行以下操作:

df_2 = pd.DataFrame([]).to_sparse()
with open(data.pickle, 'rb') as pickle_file:
try:
while True:
test = pickle.load(pickle_file)
df_2 = pd.concat([df_2, test], ignore_index= True)
except EOFError:
pass

鉴于此文件的大小(20 GB),此方法有效,但显然需要非常非常长的时间。是否可以并行化 pickle.load/pd.concat 步骤以加快加载时间?或者是否有任何其他建议可以加快此过程,特别是在代码的加载部分。

注意:生成步骤是在资源少得多的计算机上完成的,因此这就是为什么在功能更强大的计算机上完成的加载步骤可以将 DF 保存在内存中。

谢谢!

最佳答案

不要在循环中连接!这是note在文档中,也许应该是一个警告

df_list = []
with open(data.pickle, 'rb') as pickle_file:
try:
while True:
test = pickle.load(pickle_file)
df_list.append(test)
except EOFError:
pass

df_2 = pd.concat(df_list), ignore_index= True)

您现在正在循环中每次制作帧的副本,并且它正在增长,因此这根本没有效率。

习惯用法是附加到列表,然后在最后执行一次 concat all。

此外,在数据生成中写入 HDF5 文件会更好。哪个更快,并且可压缩。通常,您可以编写完整的 df,除非在打开压缩时它非常稀疏。

关于python - 加速 Pandas 稀疏数据帧的加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com