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

如何将pandas.DataFrame.compare结果从Excel读回等效DataFrame?

Pandas对比结果写入Excel后读取还原问题的解决方法

当使用df.compare()生成带层级表头的对比DataFrame,写入Excel后用pd.read_excel(header=[0,1])读取无法还原原布局,核心原因是默认写入Excel时会合并上层表头的单元格,导致读取时MultiIndex结构识别异常。以下是具体解决步骤:

解决步骤

1. 写入Excel时禁用单元格合并

写入时添加merge_cells=False参数,确保每个子列的上层表头都被明确写入,避免Excel自动合并单元格破坏层级结构:

import pandas as pd
from io import BytesIO

# 生成原始DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 4], 'B': [4, 5, 6]})

# 生成对比结果
compare_df = df1.compare(df2, keep_equal=True, keep_shape=True)

# 写入Excel时禁用单元格合并,保留完整层级表头
tmp_file = BytesIO()
compare_df.to_excel(tmp_file, merge_cells=False, index=True)
tmp_file.seek(0)

2. 读取时还原索引和层级表头

读取时指定index_col=0还原原索引,同时用header=[0,1]识别双层表头:

# 读取Excel文件
dfd = pd.read_excel(tmp_file, header=[0, 1], index_col=0)

# 验证结构一致性
print("原对比结果列结构:", compare_df.columns)
print("读取后列结构:", dfd.columns)
print("是否完全一致:", compare_df.equals(dfd))  # 输出True表示还原成功

3. 修复已存在的合并表头Excel文件

如果已经有自动合并表头的Excel文件,读取后可以手动修复列的MultiIndex:

# 读取合并表头的Excel
dfd = pd.read_excel("对比结果.xlsx", header=[0,1], index_col=0)

# 修复上层表头:填充合并单元格导致的空值
level0 = []
current_col = None
for col in dfd.columns.get_level_values(0):
    if pd.notna(col):
        current_col = col
    level0.append(current_col)
level1 = dfd.columns.get_level_values(1)

# 重新设置MultiIndex列
dfd.columns = pd.MultiIndex.from_arrays([level0, level1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:22