pd.merge() pd.join

本文探讨了Python中pandas库的两个数据合并方法:pd.join()和pd.merge()。pd.join()主要关注行级别的合并,而pd.merge()则侧重于列的合并操作,帮助理解如何在数据处理中有效地整合信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用join合并,着重关注的是⾏行行的合并

import pandas as pd
df3=pd.DataFrame({'Red':[1,3,5],'Green':[5,0,3]},index=list('abc'))
df4=pd.DataFrame({'Blue':[1,9,8],'Yellow':[6,6,7]},index=list('cde'))
print(df3)
print(df4)

在这里插入图片描述

# 简单合并(默认是left左连接,以左侧df3为基础)
df3.join(df4,how='left')

在这里插入图片描述

# 右链接 以右侧df4 为基础
df3.join(df4,how='right')

在这里插入图片描述

# 外链接
df3.join(df4,how='outer')

在这里插入图片描述

# 合并多个DataFrame对象
 df5=pd.DataFrame({'Brown':[3,4,5],'White':[1,1,2]},index=list('aed'))
# df3.join([df4,df5])

在这里插入图片描述

使用merge,着重关注的是列列的合并

df1=pd.DataFrame({'名字':list('ABCDE'),'性别':['男','⼥女女','男','男','⼥女女'],'职称':
['副教授','讲师','助教','教授','助教']},index=range(1001,1006))
df1.columns.name='学院老师'
df1.index.name='编号'
print(df1)

在这里插入图片描述

df2=pd.DataFrame({'名字':list('ABDAX'),'课程':['C++','计算机导论','汇编','数据结构','马克思原理理'],'职称':['副教授','讲师','教授','副教授','讲师'] },index=[1001,1002,1004,1001,3001])
df2.columns.name='课程'
df2.index.name='编号'
print(df2)
#默认下是根据左右对象中出现同名的列列作为连接的键,且连接⽅方式是how=’inner’
 print(pd.merge(df1,df2))# 返回匹配的

在这里插入图片描述

# 指定列列名合并
pd.merge(df1,df2,on='名字',suffixes=['_1','_2'])# 返回匹配的

在这里插入图片描述

# 连接⽅方式,根据左侧为准
pd.merge(df1,df2,how='left')

在这里插入图片描述

# 根据右侧为准
pd.merge(df1,df2,how='right')

在这里插入图片描述

# 所有
# pd.merge(df1,df2,how='outer')

在这里插入图片描述

# 根据多个键进⾏行行连接
pd.merge(df1,df2,on=['职称','名字'])

在这里插入图片描述

Python 的 Pandas 库中,`pd.merge()` 是一种用于合并两个 `DataFrame` 的关键方法,其功能类似于 SQL 中的 JOIN 操作。通过指定合并的键(`on`)以及合并方式(`how`),可以灵活地实现多种连接类型,包括内连接、外连接、左连接和右连接。 ### 合并方式 1. **内连接(`how='inner'`)** 内连接只保留两个数据集中键匹配的记录。例如,若两个 `DataFrame` 都包含 `name` 字段,则只保留 `name` 值在两个表中都存在的行[^4]。 2. **外连接(`how='outer'`)** 外连接保留两个表中所有键的并集,未匹配的字段用 `NaN` 填充。这在需要保留所有数据的情况下非常有用[^1]。 3. **左连接(`how='left'`)** 左连接保留左侧 `DataFrame` 中的所有键值,右侧未匹配的部分用 `NaN` 填充。适用于需要以左侧数据为基准进行扩展的情况。 4. **右连接(`how='right'`)** 右连接与左连接类似,但保留的是右侧 `DataFrame` 的所有键值。 ### 合并示例 以下是一个使用 `pd.merge()` 的示例代码,展示了如何根据 `name` 字段合并两个 `DataFrame`: ```python import pandas as pd # 定义两个数据框 df1 = pd.DataFrame( [['a', 1], ['b', 2], ['c', 3]], columns=['name', 'score1'] ) df2 = pd.DataFrame( [['a', 1], ['b', 2], ['d', 4]], columns=['name', 'score2'] ) # 使用 pd.merge 进行不同方式的合并 result_list = { 'inner': pd.merge(left=df1, right=df2, how='inner', on='name'), # 取 name 的交集 'outer': pd.merge(left=df1, right=df2, how='outer', on='name'), # 取 name 的并集 'left': pd.merge(left=df1, right=df2, how='left', on='name'), # 取左边表的 name 'right': pd.merge(left=df1, right=df2, how='right', on='name') # 取右边表的 name } # 打印结果 for merge_type, df in result_list.items(): print(merge_type) print(df) ``` ### 多列合并 除了单列合并,`pd.merge()` 也支持基于多个列的合并操作。例如,以下代码展示了如何基于 `a` 和 `b` 两列进行合并: ```python df3 = pd.DataFrame({'a':[1,2],'b':[3,4],'x':[5,6]}) df4 = pd.DataFrame({'a':[1,2,3],'b':[3,4,5],'y':[6,7,8]}) # 外连接 res3 = pd.merge(df3, df4, how='outer', on=['a','b']) # 内连接 res4 = pd.merge(df3, df4, how='inner', on=['a','b']) ``` ### 参数说明 - `left`: 左侧的 `DataFrame`。 - `right`: 右侧的 `DataFrame`。 - `on`: 用于合并的列名,必须在两个 `DataFrame` 中都存在。 - `how`: 合并方式,可选 `'inner'`、`'outer'`、`'left'` 或 `'right'`。 ### 相关问题 1. 如何在 Pandas 中使用 `pd.merge()` 实现多列合并? 2. `pd.merge()` 支持哪些类型的连接,它们之间有什么区别? 3. 在 Pandas 中,如何处理合并后出现的缺失值(NaN)? 4. 与 `pd.concat()` 相比,`pd.merge()` 的适用场景有哪些不同? 5. 如何在 Pandas 中使用 `pd.merge()` 进行左连接和右连接?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值