Pandas知识点-合并操作merge

Pandas知识点-合并操作merge

merge()方法是Pandas中的合并操作,在数据处理过程中很常用,本文介绍merge()方法的具体用法。

一、基础合并操作

merge(left, right): 将两个DataFrame或Series合并到一起。left和right参数是必传参数,分别传入一个DataFrame或Series对象,合并的顺序与传入的顺序一致。从参数名left和right可以看出,merge()方法主要用于按列合并(横向合并)。

原理如下:

merge()方法也可以实现按行合并(纵向)的效果,需要两个DataFrame的列名完全一样,且要指定合并方式为outer。

如果两个DataFrame的列名完全相同,使用outer合并方式,效果是将两个DataFrame按行合并到一起。merge()默认的合并方式是inner(取交集),列名完全相同时取交集合并的结果是空DataFrame。

原理如下:

其实,此时合并的原理也是按列合并,特殊的是两个DataFrame中列名完全一样,且没有指定on参数。merge()方法自动将所有列同时作为连接列,合并时取并集,所有的连接列在结果中都返回了,得到的效果就与按行合并一样。(理解how参数和on参数后就会明白,下文马上介绍)。

二、连接方式

how: 指定合并时使用的连接方式,连接方式有四种,默认为inner。

inner内连取key列的交集
outer外连取key列的并集
left左连使用左边df的key列
right右连使用右边df的key列

三、指定连接的列

on: 指定合并时用于连接(外连,内连,左连,右连)的列。默认为None,merge()方法自动识别两个DataFrame中名字相同的列,作为连接的列,如本文前面的例子中没有指定on参数,也自动识别了相同的列作为连接列。

合并时,先找到两个DataFrame中的连接列key,然后将第一个DataFrame中key列的每个值依次与第二个DataFrame中的key列进行匹配,匹配到一次结果中就会有一行数据。上面的left和right中key列都是k0~k2,k0~k2分别匹配到一次,共匹配三次,所以结果有三行。假如将k0~k2都改成k,则left中的每一个k可以与right中的k匹配到三次(many_to_many,后面会介绍),共匹配9次,结果会有9行。

on参数指定的列必须在两个被合并DataFrame中都有,否则会报错。

on参数也可以指定多列,合并时按多个列进行连接。

在合并时,只有多个列的值同时相等,两个DataFrame才会匹配上。上面的例子中,用于连接的列是key1,key2,k0,k0在两个DataFrame中都有,匹配到一次,k1,k1匹配到两次,k2,k2和k2,k3等都没有匹配成功,所以结果为三行(默认合并方式为inner)。

原理如下:

四、两个DataFrame分别指定连接列

使用on参数时,指定的列必须在两个DataFrame中都有。merge()方法也支持两个DataFrame分别指定连接的列,此时不要求指定列在两个DataFrame中都有。

left_on: 指定第一个DataFrame中用于连接的列,默认为None。

right_on: 指定第二个DataFrame中用于连接的列,默认为None。

当left_on和right_on都指定一样的列时,与用on参数的结果一样。如果left_on和right_on指定不同的列,可能因为连接列的值匹配不上,结果是一个空DataFrame,将连接方式改成outer后才能得到非空的DataFrame。

left_on和right_on也可以指定一个array数组,长度与DataFrame中的列长度相等,连接原理不变。

left_index: 设置第一个DataFrame用行索引进行连接,默认为False。

right_index: 设置第二个DataFrame用行索引进行连接,默认为False。

left_on和right_on可以与left_index和right_index混合使用,当指定了其中一个DataFrame的连接列时,必须同时指定另一个DataFrame的连接列,否则会报错。两个DataFrame都有两种方式指定连接列,所以组合的方式有四种。

DataFrameleftright

四种指定连接列的组合

left_onright_on
left_indexright_index
left_onright_index
left_indexright_on

五、自定义相同列名的后缀

suffixes: 当被合并的两个DataFrame中有相同的列名时,会给列名拼接后缀以作区分,默认为('_x', '_y')。可以修改suffixes参数进行设置,传入长度为2的字符串元组。

六、连接列是否存在DataFrame中

indicator: 在结果中增加一列,显示连接列是否存在于两个DataFrame中。indicator默认为False,如果修改为True,会增加一列,增加的列名默认为_merge。

给indicator参数指定一个值,则将这个值作为新增列的列名。在新增的列中,如果连接列同时存在于两个DataFrame中,则对应的值为both,如果连接列只存在其中一个DataFrame中,则对应的值为left_only或right_only。

七、连接列的对应关系

validate: 用于指定两个DataFrame连接列的对应关系,有one_to_one(一对一),one_to_many(一对多),many_to_one(多对一),many_to_many(多对多)四种对应方式。默认为None,merge()方法自动根据两个DataFrame的连接列采用适合的对应方式。

one_to_one: 检查两个DataFrame中的连接列,值必须唯一。

one_to_many: 检查第一个DataFrame中的连接列,值必须唯一。

many_to_one: 检查第二个DataFrame中的连接列,值必须唯一。

many_to_many: 两个DataFrame连接列中的值都可以不唯一。

使用多对多的对应方式,任何情况都满足,合并不会报错。而使用其他三种方式时,如果one对应的DataFrame中连接列的值不唯一,会报错。所以,在对数据不够了解、也没有特别的对应要求时,不用指定validate参数。

以上就是Pandas合并方法merge()的介绍,本文都是以DataFrame为例,Series合并以及Series与DataFrame合并的原理相似。

如果需要本文代码,可以扫码关注公众号“Python碎片”,然后在后台回复“pandas13”关键字获取完整代码。

 

 

  • 19
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: pandasmerge函数可以通过指定多个条件来进行合并操作。可以使用列表或元组来指定多个列作为合并的条件,例如: ```python merged_df = pd.merge(df1, df2, on=['col1', 'col2']) ``` 这将使用df1和df2中的'col1'和'col2'列作为合并的条件。如果需要指定不同的列名,则可以使用left_on和right_on参数来指定左右两个数据框中的列名,例如: ```python merged_df = pd.merge(df1, df2, left_on=['col1', 'col2'], right_on=['col3', 'col4']) ``` 这将使用df1中的'col1'和'col2'列和df2中的'col3'和'col4'列作为合并的条件。 ### 回答2: 当我们需要将两个DataFrame进行合并时,通常我们会用到pandasmerge函数。其中,merge函数有一个重要的参数——on,它可以指定两个DataFrame中所需匹配的列。但是,当涉及多个列时,该如何指定呢? pandas提供了两种解决方案,一种是将多个需匹配的列名组成一个列表传给on参数,如下所示: ```python df1.merge(df2, on=['col1', 'col2']) ``` 上述代码将基于col1和col2两列进行匹配并合并两个DataFrame。 另一种方案是使用pd.merge函数,并传入left_on和right_on参数来指定不同Dataframe中所需匹配的列。以df1和df2有col1和col2两列需匹配为例,代码如下: ```python pd.merge(df1, df2, left_on=['col1', 'col2'], right_on=['col1', 'col2']) ``` 当然,也可以使用这种方式对多列进行合并: ```python pd.merge(df1, df2, left_on=['col1', 'col2', 'col3'], right_on=['col1', 'col2', 'col4']) ``` 上述代码将会以col1、col2和col3列匹配df1中的数据,以col1、col2和col4列匹配df2中的数据,并将匹配的结果合并。 需要注意的是,在处理多列匹配时,列名的顺序十分重要。另外,在使用pd.merge时,需要显示地指定left_on和right_on参数,并且两者所需匹配的列必须一一对应。否则,数据可能会因此而出现问题。 总之,pandas提供了多种方便的方法来处理多个列的匹配问题,帮助我们更加高效地进行数据合并。 ### 回答3: pandas中的merge函数是将两个DataFrame按照某些共同的列进行合并的函数,通常用于数据的拼接与整合。merge函数的on参数指定用哪些列进行合并,当需要进行多个条件的合并时,可以将多个列名组成列表传入on参数,也可以通过传入一个字典以指定每个DataFrame需要合并的列名。 使用列表作为on参数合并多个条件的示例代码如下: ``` import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({ 'key1': ['A', 'B', 'C', 'D'], 'key2': ['X', 'Y', 'Z', 'X'], 'value': [1, 2, 3, 4] }) df2 = pd.DataFrame({ 'key1': ['B', 'D', 'E'], 'key2': ['Y', 'X', 'W'], 'value': [5, 6, 7] }) # 将df1和df2合并,并按照key1和key2列进行合并 result = pd.merge(df1, df2, on=['key1', 'key2']) print(result) ``` 以上代码将df1和df2按照key1和key2列进行合并,得到的结果如下: ``` key1 key2 value_x value_y 0 B Y 2 5 1 D X 4 6 ``` 同时,也可以通过传入一个字典作为on参数来合并多个条件,示例代码如下: ``` import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({ 'key1': ['A', 'B', 'C', 'D'], 'key2': ['X', 'Y', 'Z', 'X'], 'value': [1, 2, 3, 4] }) df2 = pd.DataFrame({ 'key3': ['B', 'D', 'E'], 'key4': ['Y', 'X', 'W'], 'value': [5, 6, 7] }) # 定义用于合并的字典 merge_on = { 'key1': 'key3', 'key2': 'key4' } # 将df1和df2按照merge_on字典中定义的条件进行合并 result = pd.merge(df1, df2, left_on=list(merge_on.keys()), right_on=list(merge_on.values())) print(result) ``` 以上代码将df1和df2按照merge_on字典中定义的key1和key2列进行合并,得到的结果如下: ``` key1 key2 value_x key3 key4 value_y 0 B Y 2 B Y 5 1 D X 4 D X 6 ``` 总结来说,pandas merge函数在合并多个DataFrame时支持多个条件,可以通过传入一个列表或一个字典来指定需要合并的多个列。不同的合并方式根据实际需求进行使用即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小斌哥ge

非常感谢,祝你一切顺利。

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

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

打赏作者

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

抵扣说明:

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

余额充值