非常实用的问题 👍
我们可以用 Python(pandas库) 快速实现「比较两个 Excel 文件中指定列是否一致」的功能。下面我会详细讲两种常见方案:
✅ 一、快速对比脚本(核心版)
比如有两个 Excel 文件:
file1.xlsxfile2.xlsx
我们只想比较它们的某一列(或几列),例如:"编号"、"姓名"。
import pandas as pd
# === 1. 读取两个 Excel 文件 ===
file1 = pd.read_excel('file1.xlsx')
file2 = pd.read_excel('file2.xlsx')
# === 2. 指定要比较的列 ===
col = '编号' # 或者 ['编号', '姓名']
# === 3. 比较列是否完全一致 ===
if file1[col].equals(file2[col]):
print(f"✅ 两个文件的【{col}】列完全一致!")
else:
print(f"❌ 两个文件的【{col}】列不一致!")
# 查看不同的数据行
diff = file1[file1[col] != file2[col]]
print("不同之处:")
print(diff)
📘 功能说明
.equals()是pandas的内置方法,用于判断两列是否完全相同(包括顺序)。- 如果有差异,会打印出不一样的行。
✅ 二、进阶对比(多列 & 忽略顺序)
有时你可能希望:
- 只比较几个关键列;
- 不关心顺序;
- 想知道哪些多了/少了。
那可以用下面这个版本👇:
import pandas as pd
# === 读取文件 ===
f1 = pd.read_excel('file1.xlsx')
f2 = pd.read_excel('file2.xlsx')
# === 要比较的列 ===
cols = ['编号', '姓名']
# === 取指定列并去重 ===
df1 = f1[cols].drop_duplicates().reset_index(drop=True)
df2 = f2[cols].drop_duplicates().reset_index(drop=True)
# === 通过 merge 找出差异 ===
merged = df1.merge(df2, on=cols, how='outer', indicator=True)
# === 筛选出不同的记录 ===
diff = merged[merged['_merge'] != 'both']
if diff.empty:
print("✅ 两个文件在指定列上完全一致!")
else:
print("❌ 存在不一致的记录:")
print(diff)
📊 输出解释
| _merge 值 | 含义 |
|---|---|
| left_only | 只在 file1.xlsx 中有 |
| right_only | 只在 file2.xlsx 中有 |
| both | 两边都有(相同) |
✅ 三、保存对比结果到 Excel
如果文件较大,建议把结果导出成一个对比报告:
diff.to_excel('compare_result.xlsx', index=False)
print("📝 对比结果已保存到 compare_result.xlsx")
✅ 四、更多可选项(根据需求)
| 需求 | 实现方式 |
|---|---|
| 忽略大小写 | 在比较前 .str.lower() |
| 忽略空格 | .str.strip() |
| 比较数字列时忽略精度误差 | numpy.isclose() |
| 只输出不一致行号 | file1[file1[col] != file2[col]].index |
📍实战例子
假设两个表如下:
file1.xlsx
| 编号 | 姓名 | 年龄 |
|---|---|---|
| 1 | 张三 | 22 |
| 2 | 李四 | 25 |
| 3 | 王五 | 30 |
file2.xlsx
| 编号 | 姓名 | 年龄 |
|---|---|---|
| 1 | 张三 | 22 |
| 2 | 李四 | 26 |
| 3 | 王五 | 30 |
运行后输出:
❌ 两个文件的【年龄】列不一致!
不同之处:
编号 姓名 年龄
1 2 李四 25
是否希望我帮你生成一个可直接运行的 命令行工具版 compare_excel.py?
可以通过命令行参数指定文件名和列名,例如:
python compare_excel.py file1.xlsx file2.xlsx 编号 姓名
并自动导出差异结果。
发表回复