数据分析常用函数—pd.merge

本文详细介绍了Python数据分析中常用的pd.merge函数,包括参数解析和多种连接方式的实例,如left、right、outer、inner连接。通过具体的数据框示例,展示了如何根据连接键合并数据,帮助读者掌握数据拼接技巧。

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

  数据分析是现在的热门,学会用python处理数据,让你从繁琐的工作中解脱出来。本文详细阐述数据分析常用函数之merge函数。
  


  
  

一、merge函数参数详解

  

pd.merge函数是把两个数据框按某种方式拼接起来,如果觉得单看语法比较枯燥,可以先看第二部分实例。
  

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:待拼接的左侧数据框。
  
right:待拼接的右侧数据框。
  
how:左右两个数据框的连接方式。可选‘left’、‘right’、‘outer’、‘inner’,默认为inner。
  
on:左右两个待拼接数据框有共同列名,且按该列拼接两个数据框时使用该参数。
  
left_on:拼接两个数据框时,左数据框对应连接关键字(可为列表)。
  
right_on:拼接两个数据框时,右数据框对应连接关键字(可为列表)。
  
left_index:若为True,则按左数据框的索引连接两个数据框。
  
right_index:若为True,则按右数据框的索引连接两个数据框。
  
sort:按字典顺序通过连接键对结果数据框进行排序。
  
suffixes:为左右数据框中重复列名定义后缀。默认加(‘x’,‘y’)。
  
  

二、merge函数简单实例

  

1 两个数据框

  
1.第一个数据框中存放了四位同学的数学成绩
  

import pandas as pd
date1 = pd.DataFrame({'name':['xie', 'li', 'wang', 'chen'],
                     'Math':[88, 90, 54, 70]})

  
具体数据格式如下:
在这里插入图片描述

  
2.第二个数据框中存放了四位同学的英语成绩
  

date2 = pd.DataFrame({'name':['xie', 'li', 'fan', 'sun'],
                     'English':[94, 83, 89, 33]})

具体数据格式如下:
在这里插入图片描述

  
  

2 按不同方式拼接两个数据框

  
1. 以默认的方式连接两个数据框
  

pd.merge(date1, date2)

在  这里插入图片描述

  
没有指定连接键时,默认采取两个数据框中的都有的列做为连接键。且连接方式how默认为inne(保留两个数据框中都有信息的列)。
  

2. how为left

pd.merge(date1, date2, how = 'left')

在这里插入图片描述
  
以左数据框中的连接键为基准,匹配右数据框中的信息,并连接。如果没有指定连接关键字,默认相同名字的那一列作为匹配键。
  

3. how为right

pd.merge(date1, date2, how = 'right')

在这里插入图片描述
  
类似left,只是以右侧数据框中的连接键为基准。
  

4. how为outer

pd.merge(date1, date2, how = 'outer')

在这里插入图片描述

取连接键的并集,保留所有信息。
  

5. 以index做为连接键

pd.merge(date1, date2, how= 'inner',left_index=True,right_index=True)

在这里插入图片描述

  
按默认index进行连接,也可以在建立数据框时自己指定index。若两个数据框除连接键外,还有相同列名,默认左侧数据框中的相同列名后加_x,右侧数据框中相同列名后加_y,见上图中的name_x和name_y。

  
  

三、merge函数进阶实例

  

1 两个数据框

  
1.第一个数据框中存放了四位同学的姓名、年龄和成绩。
  

import pandas as pd
date1 = pd.DataFrame({'name1':['xie', 'li', 'wang', 'chen'],
                      'age1':[12, 11, 11, 13],
                      'music':[95,66,98,78],
                     'Math':[88, 90, 54, 70]})

  
具体数据格式如下:
在这里插入图片描述

  
2.第二个数据框中存放了四位同学的姓名、年龄和成绩。
  

date2 = pd.DataFrame({'name2':['xie', 'li', 'fan', 'sun'],
                      'age2':[12, 11, 13, 10],
                     'English':[94, 83, 89, 33]})

具体数据格式如下:
在这里插入图片描述
  
  

2 按不同方式拼接两个数据框

  

由于两个数据框中没有相同列名,所以不指定连接关键字时会报错。
  
1.以左连接的方式连接两个数据框
  

pd.merge(date1, date2, how = 'left', left_on = 'name1', right_on = 'name2')

  
得到结果如下:
在这里插入图片描述

  

2.指定两列为连接键
  

pd.merge(date1, date2, how = 'left', left_on = ['name1', 'age1'], right_on = ['name2', 'age2'])

得到结果如下:
在这里插入图片描述

  

3.用sort对连接键值进行排序
  

pd.merge(date1, date2, how = 'left', left_on = ['name1', 'age1'], right_on = ['name2', 'age2'], sort = True)

  
得到结果如下:
在这里插入图片描述
  
按连接键的顺序对数据框进行排序。
  
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)

长按(扫一扫)识别上方二维码学习更多Python和建模知识,让你的学习和工作更出彩。
<think>好的,用户现在想详细了解pandas中的pd.merge函数,包括使用指南和参数详解。我之前已经回复过关于df.index.repeat的问题,现在需要根据用户的新请求调整内容。用户还提供了三个引用,但看起来这些引用主要讨论pd.merge的用法,可能来自之前的对话或资料。不过用户提到这些引用仅供参考,需要结合他们上一次的问题和我的回答来处理。 首先,我需要回顾用户的上一个问题,即关于df.index.repeat的详细解析。那个问题涉及到数据复制和索引操作,现在用户转向数据合并,这可能是因为他们在处理数据时需要整合不同的数据集。用户可能正在处理多个数据源,需要合并数据,所以需要深入理解pd.merge的参数和用法。 接下来,我需要组织pd.merge的详细指南。用户希望参数详解和使用示例,所以我应该按照逻辑顺序介绍每个参数,并给出示例说明。同时,结合用户提供的引用内容,尤其是引用[3]中的参数列表,我需要确保覆盖所有参数,并解释清楚每个的作用。 需要注意的是,用户可能在合并数据时遇到常见问题,比如键的选择、合并方式(inner、outer、left、right)、处理重复列名等。我应该强调这些常见问题,并提供解决方案,比如使用on参数指定键,或使用suffixes处理后缀。 另外,用户可能对pd.mergepd.concat的区别有疑问,虽然他们现在只问了merge,但适当比较可以帮助他们更好地选择合适的方法。不过根据引用[2],用户可能已经知道这一点,所以可以简要提及,但重点还是放在merge上。 还要考虑用户的实际应用场景,比如多键合并、处理索引合并等,给出相应的示例。例如,使用left_index和right_index参数在索引上进行合并,或者处理多对多关系时的注意事项。 最后,要确保回答结构清晰,分点说明,参数部分用表格展示可能更直观,代码示例要正确且易于理解。同时,生成的相关问题需要与pd.merge相关,帮助用户进一步探索可能遇到的问题,比如性能优化、处理冲突或合并后的数据验证等。</think>以下是基于Pandas官方文档和实际应用总结的`pd.merge()`函数深度解析: --- ### 一、核心功能定位 `pd.merge()`是Pandas实现**数据库风格合并**的核心方法,支持基于列/索引的关联操作,适用于处理关系型数据连接需求,相当于SQL的`JOIN`操作[^1][^2]。 --- ### 二、参数详解与使用场景 #### 基础参数 | 参数 | 类型 | 默认值 | 作用 | 示例场景 | |------|------|--------|------|----------| | `left` | DataFrame | - | 左数据集 | 客户信息表 | | `right` | DataFrame | - | 右数据集 | 订单记录表 | | `on` | str/list | None | 连接键列名 | `on='user_id'` | | `left_on` | str/list | None | 左表连接键 | 左表键为`client_id`时使用 | | `right_on` | str/list | None | 右表连接键 | 右表键为`customer_id`时使用 | | `how` | str | 'inner' | 合并方式 | `how='left'`保留所有左表记录 | #### 高级控制参数 | 参数 | 类型 | 说明 | 典型应用 | |------|------|------|----------| | `left_index` | bool | False | 使用左表索引作为连接键 | 时间序列对齐 | | `right_index` | bool | False | 使用右表索引作为连接键 | 索引值匹配合并 | | `suffixes` | tuple | ('_x','_y') | 列名冲突时的后缀 | `suffixes=('_left','_right')` | | `indicator` | bool/str | False | 添加合并来源标记列 | 调试合并结果时使用 | | `validate` | str | None | 检查合并类型是否合法 | 确保一对一关系时用`'1:1'` | --- ### 三、合并模式(`how`)详解 | 模式 | SQL等价 | 行为 | 适用场景 | |------|---------|------|----------| | `inner` | INNER JOIN | 仅保留键匹配的行 | 精确数据对齐 | | `left` | LEFT JOIN | 保留左表全部记录 | 主从表关联 | | `right` | RIGHT JOIN | 保留右表全部记录 | 逆向主从关联 | | `outer` | FULL OUTER JOIN | 保留所有记录 | 数据完整性检查 | | `cross` | CROSS JOIN | 笛卡尔积 | 组合分析 | --- ### 四、实战示例 #### 1. 基础列合并 ```python left = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]}) right = pd.DataFrame({'key': ['B', 'C', 'D'], 'value': [4, 5, 6]}) # 内连接 pd.merge(left, right, on='key', suffixes=('_left', '_right')) ``` 输出: ``` key value_left value_right 0 B 2 4 1 C 3 5 ``` #### 2. 索引合并 ```python # 左表用索引,右表用列 pd.merge(left, right, left_index=True, right_on='key') ``` #### 3. 多键合并 ```python pd.merge(df1, df2, on=['department', 'year'], how='outer') ``` --- ### 五、关键注意事项 1. **键值匹配** - 默认寻找**列名相同的键**,建议显式指定`on`参数 - 混合使用列和索引时需同时设置`left_on`+`right_index` 2. **重复值处理** - 当键列存在重复值时会产生多对多合并(类似笛卡尔积) - 使用`validate='1:m'`可验证关系类型 3. **性能优化** - 对连接键预先排序可提升速度`df.sort_values(key)` - 大数据集合并优先使用`dask.dataframe` --- ### 六、与`pd.concat()`对比 | 特性 | `pd.merge()` | `pd.concat()` | |------|--------------|---------------| | 合并维度 | 列对齐 | 行/列堆叠 | | 键匹配方式 | 基于列值 | 基于索引/位置 | | 典型场景 | 关系型数据连接 | 数据块拼接 | --- --相关问题--: 1. 如何处理合并后的列名冲突?[^3] 2. 如何实现多对多合并的数据验证?[^4] 3. 合并时出现NaN值应该怎么处理?[^5] 4. 如何提升大规模数据合并的性能?[^6]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿黎逸阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值