Pandas-连接合并函数merge()

本文深入讲解了Pandas库中merge函数的使用方法,包括其参数、功能及如何通过不同的连接类型(如内连接、右连接和全连接)整合数据集。通过实例演示,读者将学会如何灵活运用merge函数进行数据整合。

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

一、merge函数用途

pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。

二、merge()函数的具体参数

  • 用法:
    DataFrame1.merge(DataFrame2, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(’_x’, ‘_y’))
  • 参数说明
参数说明
how默认为inner,可设为inner/outer/left/right
on根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置)
left_on左连接,以DataFrame1中用作连接键的列
right_on右连接,以DataFrame2中用作连接键的列
left_index将DataFrame1行索引用作连接键
right_index将DataFrame2行索引用作连接键
sort根据连接键对合并后的数据进行排列,默认为True
suffixes对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别

三、merge用法举例

  • 创建两个数据框
#利用字典dict创建数据框
dataDf1=pd.DataFrame({'lkey':['foo','bar','baz','foo'],
                     'value':[1,2,3,4]})
dataDf2=pd.DataFrame({'rkey':['foo','bar','qux','bar'],
                     'value':[5,6,7,8]})
print(dataDf1)
print(dataDf2)
>>>
  lkey  value
0  foo      1
1  bar      2
2  baz      3
3  foo      4

  rkey  value
0  foo      5
1  bar      6
2  qux      7
3  bar      8
  • 内连接(Inner)
#inner链接
dataLfDf=dataDf1.merge(dataDf2, left_on='lkey',right_on='rkey')
>>>
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        4  foo        5
2  bar        2  bar        6
3  bar        2  bar        8
  • 右链接(Right)
#Right链接
dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey',how='right')
>>>
  lkey  value_x rkey  value_y
0  foo      1.0  foo        5
1  foo      4.0  foo        5
2  bar      2.0  bar        6
3  bar      2.0  bar        8
4  NaN      NaN  qux        7
  • 全链接(Outer)
#Outer链接
dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey', how='outer')
>>>
  lkey  value_x rkey  value_y
0  foo      1.0  foo      5.0
1  foo      4.0  foo      5.0
2  bar      2.0  bar      6.0
3  bar      2.0  bar      8.0
4  baz      3.0  NaN      NaN
5  NaN      NaN  qux      7.0
### 如何使用 `pandas.merge` 函数合并数据框 #### 基本语法 `pandas.merge()` 是用于将两个 DataFrame 对象基于一个或多个键进行连接的操作。此方法类似于 SQL 的 JOIN 操作,支持多种类型的连接方式。 ```python import pandas as pd df1 = pd.DataFrame({ 'key': ['A', 'B', 'C', 'D'], 'value_1': [1, 2, 3, 4] }) df2 = pd.DataFrame({ 'key': ['B', 'D', 'E', 'F'], 'value_2': [5, 6, 7, 8] }) ``` #### 单个键上的内连接 (Inner Join) 当仅有一个共同列作为键时,可以执行如下操作来完成两者的内连接: ```python merged_df_inner = pd.merge(df1, df2, on='key') print(merged_df_inner) ``` 上述代码会返回只保留两个原始表格中共有的键值对应的行[^1]。 #### 多个键上的外连接 (Outer Join) 如果存在多于一个的匹配条件,则可以通过传递列表给 `on` 参数来进行多键合并;而设置 `how='outer'` 可以获取所有记录,即使某些键在一个表中有而在另一个表中不存在也无妨: ```python merged_df_outer = pd.merge( df1, df2, how='outer', on=['key'] ) print(merged_df_outer) ``` 这里展示的是全外连接的结果,即包含了左表和右表所有的组合情况[^4]。 #### 左连接 (Left Join) 和 右连接 (Right Join) 对于只需要左侧或者右侧全部的数据加上另一侧相交部分的情况,可以选择做左连接或是右连接: - **左连接** ```python merged_df_left = pd.merge(df1, df2, how="left", on=["key"]) print(merged_df_left) ``` - **右连接** ```python merged_df_right = pd.merge(df1, df2, how="right", on=["key"]) print(merged_df_right) ``` 这两种情况下分别保持左边或右边完整的索引不变,并填充对方独有的项为 NaN[^2]。 #### 笛卡尔积连接 (Cartesian Product) 为了得到两张表之间每一对可能的配对关系——也就是所谓的笛卡尔乘积效果,可以在调用 `merge()` 方法时不指定任何公共键字段,而是利用交叉联结的方式实现这一点: ```python cartesian_product = pd.merge(df1.assign(dummy=1), df2.assign(dummy=1), on='dummy').drop('dummy', axis=1) print(cartesian_product) ``` 这段代码先向两个 DataFrame 添加了一个名为 "dummy" 的辅助列并将它们设为相同的常数值,之后再依据这个新加入的临时键来做常规意义上的内部联合,最终删除掉不再需要的中间件 "dummy"[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值