Python快速匹配两个DataFrame方法
时间:2025-10-08 11:09:32 430浏览 收藏
学习文章要努力,但是不要急!今天的这篇文章《Python如何匹配两个DataFrame数据》将会介绍到等等知识点,如果你想深入学习文章,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

本文介绍如何使用 Pandas 库在 Python 中匹配不同 DataFrame 中的值,特别是当这些 DataFrame 包含具有不同 ID 但其他信息(如用户名)相同的数据时。通过 pd.merge() 函数,我们可以基于共同列将多个 DataFrame 合并为一个,从而实现高效的数据匹配和转换。本文将提供详细的代码示例,帮助你理解和应用这种方法解决实际问题。
在数据分析和处理过程中,经常会遇到需要将来自不同数据源的数据进行关联和匹配的情况。Pandas 库提供了强大的数据操作功能,其中的 pd.merge() 函数是实现 DataFrame 数据匹配的关键工具。
使用 pd.merge() 函数进行数据匹配
pd.merge() 函数允许我们基于一个或多个共同列将两个 DataFrame 合并为一个。其基本语法如下:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)其中,常用的参数包括:
- left: 左侧的 DataFrame。
- right: 右侧的 DataFrame。
- on: 用于连接的列名,必须同时存在于左右两个 DataFrame 中。
- left_on: 左侧 DataFrame 用于连接的列名。
- right_on: 右侧 DataFrame 用于连接的列名。
- how: 连接方式,包括 'inner'(默认)、'outer'、'left' 和 'right'。
示例:匹配具有不同 User ID 的 DataFrame
假设我们有三个 DataFrame:
- df1: 包含 User ID (旧), User Name 和 User Email。
- df2: 包含 Group Name, User ID (旧) 和 User Name。
- df3: 包含 User ID (新), User Name 和 User Email。
我们的目标是根据 User Name 将 df1、df2 和 df3 关联起来,最终得到一个包含 Group Name, User ID (新) 的 DataFrame。
以下是实现步骤:
- 合并 df1 和 df2: 基于 User ID (旧) 进行合并。
import pandas as pd
# 示例数据
data1 = {'User ID': [1, 2, 3], 'User Name': ['Alice', 'Bob', 'Charlie'], 'User Email': ['alice@example.com', 'bob@example.com', 'charlie@example.com']}
data2 = {'Group Name': ['GroupA', 'GroupB', 'GroupA'], 'User ID': [1, 2, 3], 'User Name': ['Alice', 'Bob', 'Charlie']}
data3 = {'User ID': [101, 102, 103], 'User Name': ['Alice', 'Bob', 'Charlie'], 'User Email': ['alice@example.com', 'bob@example.com', 'charlie@example.com']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)
df_12 = pd.merge(df1, df2, on=['User ID'])
print("合并 df1 和 df2:")
print(df_12)- 重命名 df3 的 User ID 列: 为了避免列名冲突,将 df3 的 User ID 列重命名为 'old User ID'。实际上应该重命名为New User ID, 否则会报错。
df3 = df3.rename(columns={'User ID': 'New User ID'})
print("\n重命名 df3 的 User ID 列:")
print(df3)- 合并 df_12 和 df3: 基于 User Name 进行合并。
df_total = pd.merge(df_12, df3, on=['User Name'])
print("\n合并 df_12 和 df3:")
print(df_total)现在,df_total 包含了 User ID (旧) 和 User ID (新) 以及其他相关信息。
代码示例:完整流程
import pandas as pd
# 示例数据
data1 = {'User ID': [1, 2, 3], 'User Name': ['Alice', 'Bob', 'Charlie'], 'User Email': ['alice@example.com', 'bob@example.com', 'charlie@example.com']}
data2 = {'Group Name': ['GroupA', 'GroupB', 'GroupA'], 'User ID': [1, 2, 3], 'User Name': ['Alice', 'Bob', 'Charlie']}
data3 = {'User ID': [101, 102, 103], 'User Name': ['Alice', 'Bob', 'Charlie'], 'User Email': ['alice@example.com', 'bob@example.com', 'charlie@example.com']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)
# 合并 df1 和 df2
df_12 = pd.merge(df1, df2, on=['User ID'])
# 重命名 df3 的 User ID 列
df3 = df3.rename(columns={'User ID': 'New User ID'})
# 合并 df_12 和 df3
df_total = pd.merge(df_12, df3, on=['User Name'])
print(df_total)注意事项
- 确保用于合并的列名在 DataFrame 中存在且数据类型一致。
- 如果多个 DataFrame 包含相同的列名,可以使用 suffixes 参数来区分它们。
- 根据实际需求选择合适的 how 参数,例如 'left' 可以保留左侧 DataFrame 的所有行。
- 在处理大型数据集时,注意内存使用情况,避免出现内存溢出。
总结
pd.merge() 函数是 Pandas 库中强大的数据匹配工具,可以灵活地将不同 DataFrame 中的数据关联起来。通过合理使用 pd.merge() 函数,可以高效地解决各种数据匹配和转换问题,为后续的数据分析和建模提供便利。
今天关于《Python快速匹配两个DataFrame方法》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
174 收藏
-
118 收藏
-
180 收藏
-
488 收藏
-
471 收藏
-
411 收藏
-
478 收藏
-
250 收藏
-
118 收藏
-
318 收藏
-
207 收藏
-
242 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习