如何使用Python合并大型CSV文件?

问题描述 投票:0回答:2

我有一个包含许多大型 CSV 文件的数据集(总体积为 30GB)。每个文件都提供有关人员的特定类型信息。但所有文件都有一个名为“ID”的列,它描述了给定信息的相关人员。如何按“ID”列合并所有 CSV 文件,以便在完全合并的文件中我将获得有关每个 ID 的完整信息?

我有 16GB RAM 和 64GB 交换内存,但即使这样也不足以将文件与 pandas 或 Polars 合并。

python pandas dataframe python-polars
2个回答
0
投票

我没有处理如此大量数据的经验,但您可能可以尝试以下操作:将每个文件分成一些

k
相等的部分(例如,您可以尝试
k=10
)。然后,按 ID 合并所有文件的第一部分,然后合并文件的所有第二部分,依此类推。

例如,如果您有 3 个文件

a, b, c
,那么划分每个文件后您将得到文件列表

[a_0, ..., a_{k-1}]
[b_0, ..., b_{k-1}]
[c_0, ..., c_{k-1}]

然后,在合并每个

a_i, b_i, c_i
i
后,您最终会得到
k
文件,每个文件的大小为 30/k=3GB,并且您的 RAM 中应该有足够的空间来容纳这个数量。

仅确保划分文件,以便文件的第

i
部分 (
a_i, b_i, c_i
) 包含具有相同 ID 的记录。为此,您可以在分割文件之前简单地按 ID 对每个文件进行排序。


0
投票

您可以使用 pandas 来实现这一点。假设您的查询具有以下结构。

文件文件夹 --> file1.csv、file2.csv

主文件 --> main.csv

以下是上述 CSV 的内容:

main.csv

id, name, age, gender
1, Abc, 20, Male
2, Pqr, 20, Female
3, Mnq, 27, Male

file1.csv

id, Designation, Experience
1, Jr. Developer, 8 months
2, Senior Developer, 8 Years
3, HR, 5 months

file2.csv

id, Area/Field
1, Python
2, Java
3, Sales & Marketing

片段:

import pandas as pd
import os

main_file = pd.read_csv("main.csv")

for file in os.listdir("your-folder-path"):
     file_df = pd.read_csv(f"./input/{file}")
     main_file = pd.merge(main_file, file_df, on='id', how="left")

main_file.to_csv("combined.csv", index=False)


OUTPUT:

id, name, age, gender, Designation, Experience, Area/Field
1, Abc,20, Male, Jr. Developer, 8 months, Python
2, Pqr,20, Female, Senior Developer, 8 Years, Java
3, Mnq,27, Male, HR, 5 months, Sales & Marketing
© www.soinside.com 2019 - 2024. All rights reserved.