对比行列结构不同的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
相关产品推荐
相关产品推荐

