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

对比行列结构不同的Excel工作表,将差异存入对应表头的DataFrame

解决方案

核心思路

要处理行列数、表头均不同的Excel工作表对比,需分三个核心步骤:

  • 对齐两个DataFrame的行与列结构,用pd.NA填充缺失的行/列值
  • 提取共同列中存在差异的行与值
  • 单独处理仅在单个表中存在的列,将其全部纳入差异结果

代码实现

完整可运行代码

import pandas as pd

def compare_excel_sheets(file_path1, file_path2):
    # 读取两个Excel文件
    df1 = pd.read_excel(file_path1)
    df2 = pd.read_excel(file_path2)
    
    # 对齐两个表的行和列结构,缺失位置用pd.NA填充
    aligned_df1, aligned_df2 = df1.align(df2, fill_value=pd.NA)
    
    # 标记共同列中的差异位置,提取有差异的行
    diff_mask = aligned_df1 != aligned_df2
    rows_with_diff = diff_mask.any(axis=1)
    common_col_diff = pd.concat(
        [aligned_df1[rows_with_diff], aligned_df2[rows_with_diff]],
        keys=['表1', '表2'],
        axis=1
    )
    # 只保留存在差异的共同列
    common_col_diff = common_col_diff.loc[:, diff_mask.any(axis=0)]
    
    # 处理仅在单个表中存在的列
    df1_unique_cols = df1.columns.difference(df2.columns)
    df2_unique_cols = df2.columns.difference(df1.columns)
    
    df1_unique_data = df1[df1_unique_cols].add_suffix(' (表1独有)') if not df1_unique_cols.empty else pd.DataFrame()
    df2_unique_data = df2[df2_unique_cols].add_suffix(' (表2独有)') if not df2_unique_cols.empty else pd.DataFrame()
    
    # 合并所有差异结果
    final_diff_df = pd.concat([common_col_diff, df1_unique_data, df2_unique_data], axis=1)
    return final_diff_df

# 调用示例
diff_result = compare_excel_sheets('excel1.xlsx', 'excel2.xlsx')
print(diff_result)

结果说明

  • 共同列差异:用层级表头区分两个表的对应值,仅保留存在差异的行与列
  • 独有列处理:在列名后标注来源表,完整保留该列的所有数据(因为仅单侧存在本身就是差异)
  • 无差异的行和列会被自动过滤,最终结果仅包含所有有差异的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:25:18