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

如何合并列数不同的两个Pandas DataFrame

解决DataFrame追加时行数据左对齐填充的问题

问题原因

使用pd.concat([header, detail], ignore_index=True)时,Pandas会按列名自动对齐数据。因为header的列是col_1/col_2/col_3,detail的列是col_4/col_5/col_6/col_7,合并后两行数据会分别占据各自的列区域,导致出现左右分栏空值的结果。

实现思路

要让detail的行数据直接追加到header下方并左对齐填充,需要:

  1. 先将header扩展为包含所有原列(col_1到col_7)的DataFrame,缺失列补空值;
  2. 将detail的每一行数据提取出来,扩展到与所有原列长度一致(多余位置补空值),并映射到目标列;
  3. 再将两个处理后的DataFrame合并。

修正后的代码

import pandas as pd

# 读取原始数据
data = pd.read_excel('test.xlsx')
header = data[['col_1', 'col_2', 'col_3']]
detail = data[['col_4', 'col_5', 'col_6', 'col_7']]

# 获取所有目标列(保持原Excel的列顺序)
all_columns = data.columns.tolist()

# 扩展header为包含所有列的结构,缺失列填充空值
header_expanded = header.reindex(columns=all_columns)

# 处理detail:将每行数据扩展到所有列长度,左对齐填充
detail_expanded = []
for _, row in detail.iterrows():
    # 提取当前行的所有值
    row_values = row.tolist()
    # 补全到目标列的长度,后面的位置留空
    row_values += [None] * (len(all_columns) - len(row_values))
    detail_expanded.append(row_values)
# 转换为DataFrame,指定列名
detail_expanded = pd.DataFrame(detail_expanded, columns=all_columns)

# 合并两个DataFrame并重置索引
combined = pd.concat([header_expanded, detail_expanded], ignore_index=True)

# 保存结果,不输出索引列
combined.to_csv('output.csv', index=False)

效果验证

运行后生成的output.csv会和预期一致:

col_1col_2col_3col_4col_5col_6col_7
aaaaabbbbbccccc
dddddeeeeefffffggggg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:36