Pandas多列比对找不匹配数据技巧
想知道如何高效比对Pandas DataFrame中的多列数据,找出不匹配的行吗?本文将深入探讨使用`pd.merge`函数结合`indicator`参数,实现快速定位两个DataFrame在多个指定列上存在差异的行。通过详细的代码示例和注意事项,你将学会利用Pandas强大的数据处理能力,轻松应对复杂的数据比对任务,提升数据分析效率。掌握Pandas数据比对技巧,让数据分析工作更上一层楼!告别繁琐的逐行比较,拥抱高效的数据分析方法!

本文介绍了如何使用 Pandas 库有效地比较两个 DataFrame 中的多个列,并找出所有列的值完全匹配的行。我们将探讨使用 pd.merge 函数,结合 indicator 参数来识别差异行的方法,并提供示例代码和注意事项,确保结果的准确性和可靠性。通过本文,您将掌握在 Pandas 中进行复杂数据比对的技巧。
在数据分析和处理中,经常需要比较两个 DataFrame 的数据,找出差异。当需要比较多个列时,简单地逐行比较可能效率低下。 Pandas 提供了强大的 merge 函数,结合 indicator 参数,可以方便地找出两个 DataFrame 中指定列完全匹配的行,并识别出不匹配的行。
使用 pd.merge 查找不匹配项
pd.merge 函数可以根据一个或多个列将两个 DataFrame 连接起来。通过设置 how 参数为 'right',我们可以保留右侧 DataFrame (例如 df_new) 的所有行。通过设置 indicator 参数为 True,merge 函数会添加一个名为 _merge 的列,指示每一行来自哪个 DataFrame。_merge 列的值可以是 'left_only'(仅在左侧 DataFrame 中存在),'right_only'(仅在右侧 DataFrame 中存在),或 'both'(在两个 DataFrame 中都存在)。
以下是一个示例:
import pandas as pd
# 创建示例 DataFrame
df_old = pd.DataFrame({'column1': ['x', 'a'],
'column2': ['y', 'b'],
'column3': ['z', 'c']})
df_new = pd.DataFrame({'column1': ['a', 'x'],
'column2': ['b', 'y'],
'column3': ['c', 'z']})
# 使用 pd.merge 进行比较
merged_df = pd.merge(df_old, df_new, on=['column1','column2','column3'], how='right', indicator=True)
# 筛选出仅在右侧 DataFrame 中存在的行(不匹配的行)
mismatched_rows = merged_df[merged_df['_merge'] == 'right_only']
# 删除 indicator 列
mismatched_rows = mismatched_rows.drop('_merge', axis=1)
# 打印不匹配的行
print(mismatched_rows)在这个例子中,df_old 和 df_new 包含相同的数据,但顺序不同。merge 函数会根据 column1, column2 和 column3 进行比较。由于两个 DataFrame 中都存在相同的行,即使顺序不同,_merge 列的值也会是 both,因此 mismatched_rows 将为空。如果 df_new 中有 df_old 中没有的行,这些行会被识别为不匹配。
代码解释:
- 导入 Pandas 库: import pandas as pd 导入 Pandas 库,并将其别名为 pd。
- 创建示例 DataFrame: 创建两个名为 df_old 和 df_new 的 DataFrame,包含示例数据。
- 使用 pd.merge 进行比较: pd.merge(df_old, df_new, on=['column1','column2','column3'], how='right', indicator=True) 使用 pd.merge 函数将两个 DataFrame 合并。
- on=['column1','column2','column3'] 指定用于合并的列。
- how='right' 指定合并方式为右连接,即保留右侧 DataFrame (df_new) 的所有行。
- indicator=True 添加一个名为 _merge 的列,指示每一行来自哪个 DataFrame。
- 筛选出不匹配的行: mismatched_rows = merged_df[merged_df['_merge'] == 'right_only'] 筛选出 _merge 列值为 'right_only' 的行,这些行表示仅在右侧 DataFrame (df_new) 中存在的行,即不匹配的行。
- 删除 indicator 列: mismatched_rows = mismatched_rows.drop('_merge', axis=1) 删除 _merge 列,因为它不再需要。
- 打印不匹配的行: print(mismatched_rows) 打印不匹配的行。
注意事项:
- Pandas 版本: 确保你的 Pandas 版本是最新的。旧版本可能会有 bug,导致不正确的结果。
- 数据类型: 确保用于比较的列的数据类型一致。如果数据类型不一致,可能会导致错误的结果。
- 缺失值: merge 函数会处理缺失值。如果你的数据包含缺失值,请确保你理解 merge 函数如何处理它们。
- 顺序: merge 函数会考虑行的顺序。如果行的顺序不同,即使数据相同,也会被认为是不同的行。
总结:
使用 Pandas 的 pd.merge 函数结合 indicator 参数,可以有效地比较 DataFrame 中的多个列,并找出不匹配的行。这种方法比逐行比较更高效,并且可以处理大型数据集。通过理解 merge 函数的工作原理和注意事项,你可以确保结果的准确性和可靠性。
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。
拼多多退款后还能开发票吗?实用指南
- 上一篇
- 拼多多退款后还能开发票吗?实用指南
- 下一篇
- Zoom网页版隐藏滚动条方法
-
- 文章 · python教程 | 3小时前 | python · typing · Annotated · 运行时反射 typing.Annotated Python类型注解
- Python typing.Annotated 的元数据怎么在运行时读取
- 347浏览 收藏
-
- 文章 · python教程 | 10小时前 | 并发 · 日志 · python · Python logging QueueHandler QueueListener
- Python logging QueueListener 停止时怎么保证剩余日志写完
- 496浏览 收藏
-
- 文章 · python教程 | 19小时前 |
- Python asyncio.wait_for 超时后如何保留任务清理机会
- 469浏览 收藏
-
- 文章 · python教程 | 21小时前 |
- Python asyncio.timeout 和 wait_for 的超时范围怎么选择
- 386浏览 收藏
-
- 文章 · python教程 | 22小时前 | Windows · 跨平台 · Python教程 · 文件系统 · Python Python 3.15 os.path.isreserved Windows 保留路径 ntpath
- Python 3.15 os.path.isreserved 怎么判断 Windows 保留路径
- 343浏览 收藏
-
- 文章 · python教程 | 1天前 | Python教程 · pathlib · 文件系统 · 版本兼容 · Python 目录权限 Python 3.15 pathlib.Path.mkdir parent_mode
- Python pathlib.Path.mkdir 的 parent_mode 怎么影响中间目录
- 243浏览 收藏
-
- 文章 · python教程 | 1天前 | 并发 · python · C API · Python C扩展 free-threaded Py_GIL_DISABLED
- Python free-threaded 构建中 C 扩展如何声明线程安全状态
- 260浏览 收藏
-
- 文章 · python教程 | 1天前 | python · risc-v · Python 3.15 · riscv64 · 原生扩展 · Python打包 · RISC-V wheel Python 3.15 riscv64 Python扩展
- Python 3.15 RISC-V 支持落地后扩展构建要检查哪些假设
- 493浏览 收藏
-
- 文章 · python教程 | 1天前 |
- Python functools.lru_cache 缓存可变参数为什么不可哈希
- 388浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 61次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 213次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 144次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 77次使用
-
- Generrated
- Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
- 55次使用
-
- Python sqlite3 Connection serialize 怎么导出数据库快照:备份窗口、内存占用与恢复校验
- 2026-08-26 501浏览
-
- Python监控网页状态:requests异常处理实战
- 2026-05-29 501浏览
-
- TensorFlow模型部署为API的TF Serving方法
- 2026-05-26 501浏览
-
- Python字符串编码转换:encode与decode详解
- 2026-05-16 501浏览
-
- TensorFlow裁剪无用算子方法详解
- 2026-05-15 501浏览

