使用Pandas .concat(axis=1)合并DataFrame未对齐问题求助
解决pd.concat(axis=1)合并DataFrame未对齐的问题
先修正代码中的语法错误
你的代码存在三处语法问题,先纠正:
# 错误点:pd.conat拼写错误→pd.concat;括号不匹配;变量名不能有空格 result_df = pd.concat([df1, df2], axis=1)
数据未对齐的核心原因
从你给出的合并结果看,最终出现了4行,说明df1和df2的行索引标签不匹配(比如df1的索引是[0,1],而df2的索引实际是[2,3])。pd.concat(axis=1)是严格按行索引标签对齐的,当索引不重叠时,会保留所有行并填充缺失值,导致出现错位结果。
匹配你期望结果的解决方案
你需要按行位置对齐,同时让df2的a列覆盖df1的a列,保留df1的b、c列和df2的d、e列,以下两种方法都可以实现:
方法1:重置索引合并+去重列
先统一两个DataFrame的索引,确保按行位置对齐,再合并并保留重复列中来自df2的内容:
# 重置索引,丢弃原有索引,统一使用连续的0、1索引 df1_reset = df1.reset_index(drop=True) df2_reset = df2.reset_index(drop=True) # 横向合并 combined = pd.concat([df1_reset, df2_reset], axis=1) # 处理重复列:保留最后出现的列(即df2的列) result_df = combined.loc[:, ~combined.columns.duplicated(keep='last')]
方法2:用combine_first直接合并填充
combine_first会用右侧DataFrame的非空值填充左侧的缺失值,正好匹配你的需求:
# 用df2的非空值覆盖df1,同时合并所有列 result_df = df2.combine_first(df1)
执行任意一种方法后,就能得到你期望的结果:
a b c d e 0 8 3 4 9 10 1 11 6 7 12 13
内容的提问来源于stack exchange,提问作者TheMcFloyd
相关产品推荐
相关产品推荐

