如何用Python pandas比对两个Excel文件的单据税额数据并输出结果
Excel单据税额比对实现方案
前置依赖安装
执行以下命令安装所需库:pip install pandas openpyxl
完整实现代码
import pandas as pd # 1. 读取两个Excel文件,按需替换为实际字段名 df_2a = pd.read_excel("2A.xlsx", usecols=["单据号", "对应税额"]) df_pr = pd.read_excel("采购登记台账Purchase Register.xlsx", usecols=["单据号", "对应税额"]) # 数据预处理:消除空格、浮点数精度导致的比对误差 df_2a["单据号"] = df_2a["单据号"].astype(str).str.strip() df_2a["对应税额"] = df_2a["对应税额"].round(2) df_pr["单据号"] = df_pr["单据号"].astype(str).str.strip() df_pr["对应税额"] = df_pr["对应税额"].round(2) # 2. 外连接合并两个表,标记数据来源 df_merge = pd.merge( df_2a, df_pr, on="单据号", how="outer", suffixes=("_2a", "_pr"), indicator=True ) # 3. 按规则分类 # 3.1 Exact:两边都存在且税额一致 df_exact = df_merge[ (df_merge["_merge"] == "both") & (df_merge["对应税额_2a"] == df_merge["对应税额_pr"]) ][["单据号", "对应税额_2a"]].rename(columns={"对应税额_2a": "对应税额"}) # 3.2 Mismatch:两边都存在但税额不一致 df_mismatch = df_merge[ (df_merge["_merge"] == "both") & (df_merge["对应税额_2a"] != df_merge["对应税额_pr"]) ][["单据号", "对应税额_2a", "对应税额_pr"]] # 3.3 Addition in 2A:仅2A存在 df_add_2a = df_merge[df_merge["_merge"] == "left_only"][["单据号", "对应税额_2a"]].rename(columns={"对应税额_2a": "对应税额"}) # 3.4 Addition in PR:仅PR存在 df_add_pr = df_merge[df_merge["_merge"] == "right_only"][["单据号", "对应税额_pr"]].rename(columns={"对应税额_pr": "对应税额"}) # 4. 输出到新Excel,每个类别对应一个工作表 with pd.ExcelWriter("比对结果.xlsx", engine="openpyxl") as writer: df_exact.to_excel(writer, sheet_name="Exact", index=False) df_mismatch.to_excel(writer, sheet_name="Mismatch", index=False) df_add_2a.to_excel(writer, sheet_name="Addition in 2A", index=False) df_add_pr.to_excel(writer, sheet_name="Addition in PR", index=False)
注意事项
- 如果你的表中
单据号、对应税额的实际字段名和示例不同,替换读取文件时usecols参数里的字段名即可 - 若需要保留两个表的其他字段,修改
usecols参数传入需要的字段名,合并时对应调整取值逻辑即可 - 运行完成后会在当前目录生成
比对结果.xlsx文件,四个分类分别存放在不同工作表中
内容的提问来源于stack exchange,提问作者Jatin
相关产品推荐
相关产品推荐

