使用Python对比两个Excel并按差异插入对应空行的方案咨询
实现Excel行对齐的Python解决方案
依赖pandas和openpyxl两个库,先执行安装:
pip install pandas openpyxl
实现逻辑
以行的唯一标识(主键,可为单列或多列组合)作为匹配依据,先收集两个表所有出现过的主键并保留先后顺序,再对两个表分别按完整主键序列重新索引,缺失的行自动填充空白。
代码示例
import pandas as pd # 1. 读取文件,替换为你的实际文件路径 old_df = pd.read_excel("Old_excel.xlsx") new_df = pd.read_excel("New_excel.xlsx") # 2. 配置匹配主键,单列填字符串,多列填列名列表,例如 ['姓名','手机号'] primary_key = "id" # 3. 收集所有出现过的主键,去重保留首次出现的先后顺序 all_keys = [] seen_keys = set() for key in old_df[primary_key]: if key not in seen_keys: seen_keys.add(key) all_keys.append(key) for key in new_df[primary_key]: if key not in seen_keys: seen_keys.add(key) all_keys.append(key) # 4. 对两个表按完整主键序列对齐,缺失行填充空白 old_df_indexed = old_df.set_index(primary_key) new_df_indexed = new_df.set_index(primary_key) aligned_old = old_df_indexed.reindex(all_keys).reset_index() aligned_new = new_df_indexed.reindex(all_keys).reset_index() # 5. 保存结果,可根据需要修改输出路径和sheet名 with pd.ExcelWriter("aligned_result.xlsx") as writer: aligned_old.to_excel(writer, sheet_name="对齐后Old表", index=False) aligned_new.to_excel(writer, sheet_name="对齐后New表", index=False)
注意事项
- 若你的表格没有天然唯一主键,可将
primary_key配置为多列组合,后续逻辑无需修改 - 上述代码仅保留单元格内容,若需要保留原Excel的格式、公式等,可以基于
openpyxl逐行操作,逻辑和上述一致:先整理出完整的行顺序,再按顺序匹配两个表的行,缺失的位置插入空行即可
内容的提问来源于stack exchange,提问作者Nitesh Yaduvanshi
相关产品推荐
相关产品推荐

