Python代码轻松实现Excel两列数据对比
在日常的办公与数据分析工作中,我们经常会遇到这样的需求:核对Excel表格中的两列数据,找出它们的差异或相同点。虽然Excel自带的 VLOOKUP 函数或条件格式也能解决部分问题,但当数据量庞大、对比逻辑复杂,或者你需要进行自动化处理时,Python 无疑是更高效、更强大的选择。
本文将以完全零基础的视角,带你一步步使用Python完成Excel中两列数据的对比。我们将使用Python中最强大的数据处理库——pandas。
1. 准备工作 (Prerequisites)
在开始编写代码之前,我们需要准备好开发环境和测试数据。
1.1 安装Python与必要的第三方库
确保你的电脑上已经安装了Python。接下来,我们需要安装两个关键的库:
- pandas:用于数据处理和分析的核心库。
- openpyxl:用于读取和写入
.xlsx格式的Excel文件。
打开你的命令行工具(Windows用户打开CMD或PowerShell,Mac用户打开终端 Terminal),输入以下命令并回车:
pip install pandas openpyxl
1.2 准备测试数据
为了方便演示,请在你的电脑桌面上新建一个名为 data.xlsx 的Excel文件,并在其中创建两列数据,表头分别为 列A 和 列B:
| 列A | 列B |
|---|---|
| 苹果 | 苹果 |
| 香蕉 | 橘子 |
| 葡萄 | 葡萄 |
| 芒果 | 芒果 |
| 西瓜 | 菠萝 |
将该文件保存在与你即将编写的Python脚本相同的文件夹目录下。
2. 分步操作指南 (Step-by-Step Guide)
我们将通过四个简单的步骤,完成数据的读取、对比和结果导出。
步骤 1:导入库并读取Excel文件
首先,我们需要让Python“看到”我们的Excel数据。
import pandas as pd
# 读取Excel文件
# 注意:确保 data.xlsx 与你的Python代码在同一个文件夹
df = pd.read_excel('data.xlsx')
# 打印数据,检查是否读取成功
print("原始数据:")
print(df)
步骤 2:基础对比(判断同行数据是否一致)
最常见的需求是:检查同一行中,列A 和 列B 的数据是否完全一样。我们可以在表格后面新增一列 对比结果 来显示。
# 判断列A和列B是否相等,结果会生成 True 或 False
df['对比结果'] = df['列A'] == df['列B']
# 为了让结果更直观,我们可以将 True/False 替换为中文描述
df['对比结果'] = df['对比结果'].map({True: '相同', False: '不同'})
print("\n同行对比后的数据:")
print(df)
步骤 3:交叉对比(找出一列中有,另一列中没有的数据)
有时候,数据不是按行对应的。我们想知道:列A中存在,但列B中不存在的数据有哪些?
# 使用 isin() 函数判断列A的数据是否在列B中
# ~ 符号表示“取反”(即不存在于列B中)
diff_A_not_in_B = df[~df['列A'].isin(df['列B'])]
print("\n在列A中但不在列B中的数据:")
print(diff_A_not_in_B['列A'].tolist())
步骤 4:将结果导出为新的Excel文件
处理完数据后,我们需要将结果保存下来,而不是仅仅打印在屏幕上。
# 将包含对比结果的 DataFrame 保存为新的 Excel 文件
# index=False 表示不保存行索引(即最左侧的 0, 1, 2, 3...)
df.to_excel('result.xlsx', index=False)
print("\n对比完成!结果已保存至 result.xlsx")
完整代码 (Complete Code)
将以上步骤整合,你可以直接复制以下代码运行:
import pandas as pd
def compare_excel_columns():
# 1. 读取数据
print("正在读取数据...")
df = pd.read_excel('data.xlsx')
# 2. 清理数据(去除不可见的空格,防止比对出错)
df['列A'] = df['列A'].astype(str).str.strip()
df['列B'] = df['列B'].astype(str).str.strip()
# 3. 同行比对
df['同行是否相同'] = df['列A'] == df['列B']
df['同行是否相同'] = df['同行是否相同'].map({True: '相同', False: '不同'})
# 4. 交叉比对
df['是否在列B中存在'] = df['列A'].isin(df['列B']).map({True: '存在', False: '不存在'})
# 5. 导出结果
df.to_excel('result.xlsx', index=False)
print("对比完成!请查看当前目录下的 result.xlsx 文件。")
if __name__ == "__main__":
compare_excel_columns()
3. 常见踩坑与注意事项 (Common Pitfalls)
对于新手来说,即使代码完全正确,也可能因为数据本身的问题导致对比结果不符合预期。以下是三个最常见的“坑”:
1.隐藏的空格 (Leading/Trailing Spaces):在Excel中录入数据时,很容易不小心多敲一个空格。计算机在对比时,"苹果" 和 "苹果 "(带空格)会被认为是完全不同的两个词。
解决方案: 在对比前,使用 .str.strip() 方法去除字符串两端的空格(如上方完整代码中的步骤2所示)。
2.大小写敏感 (Case Sensitivity):对于英文字母,Python默认是区分大小写的(Apple 不等于 apple)。
解决方案: 可以在对比前将所有字母统一转换为小写:df['列A'].str.lower() == df['列B'].str.lower()。
3.数据类型不一致 (Data Type Mismatch):有时候列A中的 123 是数字类型,而列B中的 123 是文本类型。这会导致对比结果为“不同”。
解决方案: 在对比前,使用 .astype(str) 强制将两列都转换为字符串格式。
4. 总结与学习资源 (Conclusion & Resources)
通过本文,你已经掌握了如何使用Python和 pandas 库来读取Excel文件、进行同行的精准对比、交叉查找差异,并将最终结果导出。相比于手动核对,Python不仅速度极快,还能彻底避免人为眼花的失误。
当你熟悉了这些基础操作后,你可以尝试处理拥有几十万行数据的表格,你会发现Python的运行速度依然只需几秒钟。
到此这篇关于Python代码轻松实现Excel两列数据对比的文章就介绍到这了,更多相关Python Excel数据对比内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Django配合python进行requests请求的问题及解决方法
Python作为目前比较流行的编程语言,他内置的Django框架就是一个很好的网络框架,可以被用来搭建后端,和前端进行交互,那么我们现在来学习一下,如何用Python本地进行requests请求,并通过请求让Django帮我们解决一些问题2022-06-06


最新评论