gpt4 book ai didi

python - 如何在 python 中以内存高效的方式加载和合并多个 .txt 文件?

转载 作者:行者123 更新时间:2023-12-05 05:46:59 25 4
gpt4 key购买 nike

我正在尝试读取多个 (>1000) .txt 文件(平均约 700 MB,带分隔符的无 header CSV,没有逗号或其他分隔符)并将它们合并到一个 pandas 数据帧中(以便下一次运行分析在整个数据集上)。

我在 HPC 服务器上通过 SSH 运行此程序,我在该服务器上请求 50GB 内存、1 个节点、每个节点 1 个任务(这只是一个大胆的猜测,因为我以前从未这样做过)。

到目前为止,我的想法是这样的:

li = []

for filename in all_files:
df = pd.read_csv(filename, sep=None, header=0, engine='python')
li.append(df)

df = pd.concat(li, axis=0, ignore_index=True)

但几个小时后加载了大约。第 360 个文件进程被终止,我收到错误消息:

numpy.core._exceptions.MemoryError: Unable to allocate 1.11 GiB for an array with shape (10, 14921599) and data type float64

你知道如何更有效地加载和合并数据吗? (我假设只是请求更多 RAM 仍然不能让我完成整个 .txt 文件集!?)

另外,我想之后以“内存高效”的方式保存生成的数据帧,你知道最好的方式/格式(csv?)吗?

如有任何帮助,我们将不胜感激!

最佳答案

正如您所说,您有这么多文件并且需要如此多的内存,所以我建议像这样以附加模式(将数据附加到先前保存的数据)将所有文件加载并保存在一个文件中

for filename in all_files:
df = pd.read_csv(filename, sep=None, header=0, engine='python')
df.to_csv('./data.csv', header=None, index=None, mode='a')

将所有文件保存在单个文件中后,您现在可以像这样将单个文件作为数据帧读取:

df = pd.read_csv('./data.csv',header=None,index_col=False)

之后,如果您因为内存不足而无法阅读此文件,您可以使用这样的阅读器:

chunksize = 10 ** 6
with pd.read_csv('./data.csv',header=None,index_col=False, chunksize=chunksize) as reader:
for chunk in reader:
# Do What you want

关于python - 如何在 python 中以内存高效的方式加载和合并多个 .txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71100248/

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