You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现文件夹内多CSV文件按UNITID分组并合并为单一DataFrame的方法

基于UNITID合并多CSV文件并保留所有列的解决方案

嘿,这个需求其实就是典型的多表基于共同主键合并的场景,用pandas就能完美解决,我给你拆解成清晰的步骤:

1. 准备依赖与导入库

首先确保你已经安装了pandas,如果还没装,先在终端运行:

pip install pandas

然后在代码里导入需要的库:

import pandas as pd
import os
from functools import reduce

2. 批量读取文件夹内的所有CSV文件

先指定你的CSV文件夹路径,然后遍历读取每个文件,把它们的DataFrame存入一个列表中:

# 替换成你的CSV文件夹实际路径
folder_path = "/your/csv/folder/path"
data_frames = []

for file_name in os.listdir(folder_path):
    if file_name.endswith(".csv"):
        full_path = os.path.join(folder_path, file_name)
        # 把UNITID设为字符串类型,避免带前导零的ID被转成整数丢失信息
        df = pd.read_csv(full_path, dtype={"UNITID": str})
        data_frames.append(df)

3. 基于UNITID合并所有DataFrame

因为所有文件只有UNITID是共同列,其他列互不重复,我们可以用reduce函数批量合并所有表:

# 合并方式选"inner"会只保留在所有CSV中都存在的UNITID;如果想保留所有出现过的UNITID,改成"outer"
merged_result = reduce(lambda left_df, right_df: pd.merge(left_df, right_df, on="UNITID", how="inner"), data_frames)

这里解释下how参数的区别:

  • inner:仅保留在所有CSV文件中都出现的UNITID记录
  • outer:保留任意CSV中出现的UNITID,缺失的列值会填充为NaN
    你可以根据业务需求选择合适的合并方式。

4. 验证结果与导出(可选)

合并完成后,你可以查看结果,或者导出为新的CSV文件:

# 查看合并后DataFrame的前5行
print(merged_result.head())

# 导出为新的CSV,index=False表示不保存索引列
merged_result.to_csv("merged_units.csv", index=False)

额外小贴士

  • 如果某个CSV文件里存在重复的UNITID记录,建议合并前先处理重复项,比如用df.groupby("UNITID").first()取第一条,或者根据需求做聚合,避免合并后出现冗余行
  • 万一遇到列名冲突(虽然你说其余列都不同,但以防万一),可以在读取文件时给非UNITID的列加上文件名前缀,方便区分:
df = pd.read_csv(full_path, dtype={"UNITID": str})
# 给除了UNITID之外的列添加文件名前缀
prefix = file_name.split(".")[0] + "_"
df = df.add_prefix(prefix)
# 把加了前缀的UNITID改回原名称
df.rename(columns={prefix + "UNITID": "UNITID"}, inplace=True)
data_frames.append(df)

内容的提问来源于stack exchange,提问作者CIHAnalytics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:08:10