必须先对齐列名再合并,推荐用rename()统一列名后concat();也可用reindex()按标准字段清单对齐;keys参数仅用于分层堆叠,不解决列名冲突。

直接用 pd.concat() 会报错或丢失数据,必须先对齐列名再合并。
用 rename() 统一列名再 concat()
这是最可控的方式,尤其适合列名差异明确、数量不多的场景。核心是先让所有 DataFrame 的列名变成一致的逻辑名称,再拼接。
- 先检查各数据集的列名:
df1.columns、df2.columns,找出对应关系(比如"user_id"和"id"都指用户主键) - 对每个 DataFrame 单独调用
rename(),传入字典映射:df1.rename(columns={"id": "user_id", "name_full": "name"}) - 确保重命名后所有 DataFrame 列名完全一致(顺序无关),再执行
pd.concat([df1, df2, df3], ignore_index=True) - 如果某列只在部分数据集中存在,
concat默认会补NaN,无需额外处理
用 pd.concat(..., keys=...) 保留原始结构但不解决列名冲突
这个方法不是为“合并”设计的,而是为“分层堆叠”准备的。它不会自动对齐列,只是加一层索引标签,列名仍保持原样。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 当你需要追溯每行来自哪个原始数据集时才用:
pd.concat([df1, df2], keys=["source_a", "source_b"]) - 结果会是 MultiIndex,列名仍是混杂的,后续仍需
rename或reindex才能统一分析 - 若强行用它替代列对齐,后续
groupby或agg很容易因列名不一致报KeyError
用 reindex() 强制对齐列并填充缺失值
适合列名差异大、但你知道目标列集合的场景,比如已定义好标准字段清单。
- 先确定最终需要哪些列,例如:
standard_cols = ["user_id", "name", "email", "created_at"] - 对每个 DataFrame 调用:
df1.reindex(columns=standard_cols),缺失列填NaN,多余列被丢弃 - 注意:
reindex不改原列名,只按目标列名筛选+补空;若原列名不在standard_cols中,该列直接消失 - 之后再
concat就不会出现列错位,但要提前确认哪些列可安全丢弃
列名对齐不是“一步到位”的操作,关键在于你是否愿意/能够定义出统一的语义字段。如果原始数据连字段含义都模糊(比如 "col_x" 到底是年龄还是评分),光靠 rename 或 reindex 解决不了问题——得先人工核对业务逻辑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










