如何拼接不同形状的pandas DataFrame并保留首个表的列结构
解决方法
第一步:打印两个DataFrame无交集的列
使用集合对称差运算直接获取两边独有的列:
# 计算无交集的列 diff_columns = list(set(df1.columns).symmetric_difference(df2.columns)) print("两个表不存在交集的列:", diff_columns)
运行输出:
两个表不存在交集的列: ['val1', 'val2']
第二步:完成拼接
用reindex对齐df2的列到df1的格式后再拼接,完全满足要求:
# 对齐df2列顺序和范围后拼接,自动重置索引 result = pd.concat( [df1, df2.reindex(columns=df1.columns)], ignore_index=True ) print(result)
运行输出和预期效果完全一致:
id val val1 0 1 x x1 1 2 y y1 2 3 w w1 3 4 z z1 4 5 t NaN 5 6 s NaN 6 7 v NaN 7 8 l NaN
说明
- 全程没有使用连接操作,仅通过列对齐+行拼接实现需求
reindex方法会自动保留df1的列顺序,丢弃df2独有的列,同时将df1存在但df2缺失的列自动填充为NaNignore_index=True会自动重置拼接后的结果索引,不需要额外调用reset_index()- 该写法兼容pandas全版本,避免使用已经在pandas 2.0+中废弃的
append方法
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

