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

使用Python合并同一文件夹下含共同client_ID列的多个CSV文件

问题诊断
  • 初始的df为空DataFrame:pd.merge关联空表和新读取的CSV数据时,没有可匹配的行记录,每次合并结果都会是空
  • 关联键配置错误:你明确说明所有CSV的共同列是client_ID,但代码中merge使用的关联键是partner_id,字段不匹配会直接报错或无匹配结果
  • 结果未赋值给外层变量:循环内合并的结果仅存储在临时变量df_file中,从头到尾没有修改过外层的df变量,最后输出的df仍然是最初定义的空表
  • 路径拼接不严谨(非核心问题):直接拼接路径字符串容易出现多斜杠的兼容问题,推荐用os.path.join处理路径拼接
修正方案

根据你的合并需求,可选择以下两种适配方案:

场景1:多个CSV结构一致,需要纵向合并所有行(最常用的多CSV合并需求)

如果所有CSV的列结构一致,仅需把所有文件的行汇总到同一张表,无需关联操作,直接使用pd.concat即可,执行效率更高:

import pandas as pd
import glob
import os

path = r'/folder_path/'
# 更稳妥的路径匹配方式,避免多斜杠兼容问题
allfiles = glob.glob(os.path.join(path, "*.csv"))
# 先将所有CSV读取为DataFrame存入列表,再一次性合并
df_list = []
for file in allfiles:
    df_tmp = pd.read_csv(file)
    df_list.append(df_tmp)

# 纵向拼接,ignore_index参数可重置全局行号
df = pd.concat(df_list, ignore_index=True)

场景2:每个CSV存储同一客户的不同维度数据,需要按client_ID横向关联

如果确实需要通过关联键横向拼接多表数据,按以下代码修改即可:

import pandas as pd
import glob
import os

path = r'/folder_path/'
allfiles = glob.glob(os.path.join(path, "*.csv"))

# 提前判断避免空文件夹报错
if len(allfiles) == 0:
    raise ValueError("目标文件夹下未找到CSV文件")

# 读取第一个文件作为初始关联基准
df = pd.read_csv(allfiles[0])

for file in allfiles[1:]:
    df_file = pd.read_csv(file)
    # 关联键改为正确的client_ID,how参数可根据需求调整为inner/left/outer
    df = pd.merge(df, df_file, on='client_ID', how='outer')

补充说明:merge的how参数可按需调整:outer保留所有文件出现过的全部client_ID,inner仅保留所有文件共有的client_ID,left仅保留第一个文件的全部client_ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:01