pandas批量数据合并核心是统一列名、对齐索引、选对方式:一、用glob自动读取多csv再concat纵向堆叠;二、用merge按字段关联,注意on/how参数及ID类型一致;三、多表用reduce链式merge;四、合并前必查类型、去空格大小写、去重。

用pandas做批量数据合并,核心就三点:统一列名、对齐索引、选对合并方式。别硬拼,先理清逻辑再写代码。
一、多个csv文件自动读取并合并
常见场景是同一格式的多个表格(比如每月销售数据),存在一个文件夹里。不用一个个pd.read_csv,用glob+循环更省事:
- 用glob.glob(“data/month_*.csv”)匹配所有目标文件路径
- 用[pd.read_csv(f) for f in file_list]批量读取,生成DataFrame列表
- 用pd.concat(df_list, ignore_index=True)纵向堆叠,red”>ignore_index=True重置行号,避免重复索引
小技巧:如果各表字段顺序不一致,concat前可统一列顺序,比如df = df[[“id”, “name”, “amount”]]。
二、按字段精准合并(merge)不是简单拼接
两个表靠某个字段关联(如用户ID),要用pd.merge(),不是concat。关键参数要盯紧:
立即学习“Python免费学习笔记(深入)”;
- on=指定共用列名;left_on和right_on用于列名不同时分别指定
- how=决定合并逻辑:“inner”(交集)、“left”(左表全保留)、“outer”(并集)
- 合并后检查result.isna().sum(),看关键字段是否大量缺失——可能是ID类型不一致(str vs int)或空格/大小写问题
三、多表串联合并(reduce + merge)
三个及以上表按同一字段依次关联?别嵌套merge。用functools.reduce链式处理更清晰:
- 把所有DataFrame放进列表:dfs = [df1, df2, df3]
- 一行搞定:from functools import reduce; final = reduce(Lambda left, right: pd.merge(left, right, on=”key”), dfs)
- 注意:所有表的“key”列数据类型和清洗状态必须一致,否则中间某次merge就中断
四、合并前必做的三件事
90%的合并报错或结果异常,其实出在前期准备上:
- 查类型:用df.dtypes确认关联字段是不是同一类型(特别是数字ID被读成Object)
- 去空格和大小写:如df[“name”] = df[“name”].str.strip().str.lower()
- 去重检查:用df.duplicated(subset=[“key”]).sum()看关联键是否唯一,非唯一时merge会爆炸性扩行
基本上就这些。不复杂但容易忽略细节,动手前花两分钟检查字段和类型,比报错后再调试快得多。