如何合并结构不同的两个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
相关产品推荐
相关产品推荐

