如何将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
相关产品推荐
相关产品推荐

