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

如何合并结构不同的两个DataFrame?pd.concat报错求助

不同结构DataFrame合并解决方案

你要合并两个列结构不同的DataFrame,用pd.concat时报MismatchedDataFrameException,其实用pandas原生方法就能轻松实现需求,以下是具体解决办法:

直接用pandas原生concat

pandas的pd.concat默认采用join='outer'模式,自动保留所有列,缺失的列会填充NaN,完全符合你要的22行、包含所有列的结果:

import pandas as pd

# 将两个DataFrame放入列表
df_list = [df1, df2]
# 执行合并,ignore_index参数重置行索引
final_df = pd.concat(df_list, ignore_index=True)

运行后得到的final_df就是你期望的结构:DF1的D/E/F列、DF2的C列都会填充空值(NaN),总行数为10+12=22行。

报错原因排查

MismatchedDataFrameException不是pandas原生concat会抛出的错误,大概率是以下两种情况:

  • 你使用了Dask这类分布式DataFrame库,它的concat默认要求所有DataFrame列一致,需要显式添加join='outer'参数:
    import dask.dataframe as dd
    final_df = dd.concat(df_list, ignore_index=True, join='outer')
    
  • 代码中存在自定义的列校验逻辑,比如封装了concat函数强制列匹配,这种情况要么去掉校验规则,要么手动补全缺失列。

手动补全列的备选方案

如果不想依赖concat的join参数,也可以手动给每个DataFrame补全缺失列后再合并:

# 收集所有列名
all_columns = list(set(df1.columns).union(df2.columns))

# 给两个DataFrame补全缺失列,缺失值自动填充NaN
df1_full = df1.reindex(columns=all_columns)
df2_full = df2.reindex(columns=all_columns)

# 合并处理后的DataFrame
final_df = pd.concat([df1_full, df2_full], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:13:29