gpt4 book ai didi

python - 如何在 python 中组合大型 csv 文件?

转载 作者:行者123 更新时间:2023-12-03 18:44:54 24 4
gpt4 key购买 nike

我有 18 个 csv 文件,每个文件大约 1.6Gb,每个文件包含大约 1200 万行。每个文件代表一年的数据。我需要组合所有这些文件,提取某些地理区域的数据,然后分析时间序列。做这个的最好方式是什么?

我已经厌倦了使用 pd.read_csv 但我达到了内存限制。我试过包含一个块大小参数,但这给了我一个 TextFileReader 对象,我不知道如何组合这些来制作数据帧。我也试过 pd.concat 但这也不起作用。

最佳答案

这是使用 Pandas 组合非常大的 csv 文件的优雅方式。
该技术是每次迭代将行数(定义为 CHUNK_SIZE)加载到内存,直到完成。这些行将以“附加”模式附加到输出文件。

import pandas as pd

CHUNK_SIZE = 50000
csv_file_list = ["file1.csv", "file2.csv", "file3.csv"]
output_file = "./result_merge/output.csv"

for csv_file_name in csv_file_list:
chunk_container = pd.read_csv(csv_file_name, chunksize=CHUNK_SIZE)
for chunk in chunk_container:
chunk.to_csv(output_file, mode="a", index=False)

但是,如果您的文件包含标题,则跳过即将出现的文件中的标题(第一个除外)是有意义的。由于重复标题是意外的。在这种情况下,解决方案如下:
import pandas as pd

CHUNK_SIZE = 50000
csv_file_list = ["file1.csv", "file2.csv", "file3.csv"]
output_file = "./result_merge/output.csv"

first_one = True
for csv_file_name in csv_file_list:

if not first_one: # if it is not the first csv file then skip the header row (row 0) of that file
skip_row = [0]
else:
skip_row = []

chunk_container = pd.read_csv(csv_file_name, chunksize=CHUNK_SIZE, skiprows = skip_row)
for chunk in chunk_container:
chunk.to_csv(output_file, mode="a", index=False)
first_one = False

关于python - 如何在 python 中组合大型 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56494140/

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