Pandas merge合并操作

本文详细介绍了Pandas的merge()函数,演示如何通过'on'、'left_on'、'right_on'和'how'参数进行DataFrame的单键和多键连接,以及与SQL JOIN操作的对应关系。通过实例展示了左连接、右连接、外连接和内连接的使用方法。

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

Pandas merge合并操作

Pandas 提供的 merge() 函数能够进行高效的合并操作,这与 SQL 关系型数据库的 MERGE 用法非常相似。从字面意思上不难理解,merge 翻译为“合并”,指的是将两个 DataFrame 数据表按照指定的规则进行连接,最后拼接成一个新的 DataFrame 数据表。

merge() 函数的法格式如下:

pd.merge(left, right, how='inner', on=None, left_on=None, 
right_on=None,left_index=False, right_index=False, 
sort=True,suffixes=('_x', '_y'), copy=True)

参数说明,如下表所示:

参数名称说明
left/right两个不同的 DataFrame 对象。
on指定用于连接的键(即列标签的名字),该键必须同时存在于左右两个 DataFrame 中,如果没有指定,并且其他参数也未指定, 那么将会以两个 DataFrame 的列名交集做为连接键。
left_on指定左侧 DataFrame 中作连接键的列名。该参数在左、右列标签名不相同,但表达的含义相同时非常有用。
right_on指定左侧 DataFrame 中作连接键的列名。
left_index布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键,若 DataFrame 具有多层索引(MultiIndex),则层的数量必须与连接键的数量相等。
right_index布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键。
how要执行的合并类型,从 {‘left’, ‘right’, ‘outer’, ‘inner’} 中取值,默认为“inner”内连接。
sort布尔值参数,默认为True,它会将合并后的数据进行排序;若设置为 False,则按照 how 给定的参数值进行排序。
suffixes字符串组成的元组。当左右 DataFrame 存在相同列名时,通过该参数可以在相同的列名后附加后缀名,默认为(’_x’,’_y’)。
copy默认为 True,表示对数据进行复制。

注意:Pandas 库的 merge() 支持各种内外连接,与其相似的还有 join() 函数(默认为左连接)。

下面创建两个不同的 DataFrame,然后对它们进行合并操作:

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['William', 'Albert', 'Tony', 'Allen'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
print (left) 
print (right)  

输出如下:

 id    Name subject_id
0   1   Smith       sub1
1   2   Maiki       sub2
2   3  Hunter       sub4
3   4   Hilen       sub6

   id     Name subject_id
0   1  William       sub2
1   2   Albert       sub4
2   3     Tony       sub3
3   4    Allen       sub6

1) 在单个键上进行合并操作

通过 on 参数指定一个连接键,然后对上述 DataFrame 进行合并操作:

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['William', 'Albert', 'Tony', 'Allen'], 
   'subject_id':['sub2','sub4','sub3','sub6']})
#通过on参数指定合并的键
print(pd.merge(left,right,on='id'))

输出结果:

   id  Name_x subject_id_x   Name_y subject_id_y
0   1   Smith         sub1  William         sub2
1   2   Maiki         sub2   Albert         sub4
2   3  Hunter         sub4     Tony         sub3
3   4   Hilen         sub6    Allen         sub6

2) 在多个键上进行合并操作

下面示例,指定多个键来合并上述两个 DataFrame 对象:

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['Bill', 'Lucy', 'Jack', 'Mike'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
print(pd.merge(left,right,on=['id','subject_id']))

输出结果:

   id Name_x subject_id Name_y
0   4  Hilen       sub6   Mike

使用how参数合并

通过how参数可以确定 DataFrame 中要包含哪些键,如果在左表、右表都不存的键,那么合并后该键对应的值为 NaN。为了便于大家学习,我们将 how 参数和与其等价的 SQL 语句做了总结:

Merge方法等效 SQL描述
leftLEFT OUTER JOIN使用左侧对象的key
rightRIGHT OUTER JOIN使用右侧对象的key
outerFULL OUTER JOIN使用左右两侧所有key的并集
innerINNER JOIN使用左右两侧key的交集

1) left join

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['Bill', 'Lucy', 'Jack', 'Mike'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
#以left侧的subject_id为键
print(pd.merge(left,right,on='subject_id',how="left"))

输出结果:

   id_x  Name_x subject_id  id_y Name_y
0     1   Smith       sub1   NaN    NaN
1     2   Maiki       sub2   1.0   Bill
2     3  Hunter       sub4   2.0   Lucy
3     4   Hilen       sub6   4.0   Mike

2) right join

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['Bill', 'Lucy', 'Jack', 'Mike'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
#以right侧的subject_id为键
print(pd.merge(left,right,on='subject_id',how="right"))

输出结果:

   id_x  Name_x subject_id  id_y Name_y
0   2.0   Maiki       sub2     1   Bill
1   3.0  Hunter       sub4     2   Lucy
2   4.0   Hilen       sub6     4   Mike
3   NaN     NaN       sub3     3   Jack

3) outer join(并集)

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['Bill', 'Lucy', 'Jack', 'Mike'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
#求出两个subject_id的并集,并作为键
print(pd.merge(left,right,on='subject_id',how="outer"))

输出结果:

   id_x  Name_x subject_id  id_y Name_y
0   1.0   Smith       sub1   NaN    NaN
1   2.0   Maiki       sub2   1.0   Bill
2   3.0  Hunter       sub4   2.0   Lucy
3   4.0   Hilen       sub6   4.0   Mike
4   NaN     NaN       sub3   3.0   Jack

4) inner join(交集)

import pandas as pd 
left = pd.DataFrame({ 
   'id':[1,2,3,4], 
   'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'], 
   'subject_id':['sub1','sub2','sub4','sub6']}) 
right = pd.DataFrame({ 
    'id':[1,2,3,4], 
   'Name': ['Bill', 'Lucy', 'Jack', 'Mike'], 
   'subject_id':['sub2','sub4','sub3','sub6']}) 
#求出两个subject_id的交集,并将结果作为键
print(pd.merge(left,right,on='subject_id',how="inner"))

输出结果:

   id_x  Name_x subject_id  id_y Name_y
0     2   Maiki       sub2     1   Bill
1     3  Hunter       sub4     2   Lucy
2     4   Hilen       sub6     4   Mike

注意:当 a 与 b 进行内连操作时 a.join(b) 不等于 b.join(a)。

### 回答1: 可以使用python中的pandas库,通过读取excel文件,并使用merge函数合并。具体步骤为: 1. 使用pandas的read_excel函数读取需要合并的excel文件,并转化为dataframe类型。 2. 使用merge函数将需要合并的dataframe进行合并,根据合并所需的关键列,在on参数中指定。 3. 将合并后的结果保存为需要的格式,如excel文件。 例子: ```python import pandas as pd # 读取需要合并的excel文件 df1 = pd.read_excel('file1.xlsx') df2 = pd.read_excel('file2.xlsx') # 合并 merged_df = pd.merge(df1, df2, on='key_column') # 保存为excel merged_df.to_excel('merged_file.xlsx', index=False) ``` 其中,key_column为需要合并的关键列。 ### 回答2: Pandas是一个扩展的Python库,它提供了许多功能来进行数据操作,其中包括对Excel数据的合并Pandasmerge()函数提供了一种将多个Excel数据表合并为一个数据表的方法。下面是如何使用Pandas库进行Excel数据表的合并操作的步骤。 1.导入Pandas库:首先,必须导入Pandas和NumPy库。Pandas库将用于数据分析和处理,而NumPy库将用于数组操作。 import pandas as pd import numpy as np 2.读入Excel文件:将要合并的所有Excel文件读入到Pandas DataFrame中。可以使用read_excel方法读入数据。将excel文件读入为数据框。 df1=pd.read_excel("文件路径1") df2=pd.read_excel("文件路径2") 3.合并Excel文件:使用Pandasmerge()函数将两个DataFrame合并为一个。可以使用类似于SQL inner join,left join,right join和outer join的类型来进行合并。使用merge()函数完成合并merged_df=pd.merge(df1,df2,on="id",how="outer") 上述代码中,id是两个数据框共有的行,outer join表示合并两个数据框并保留所有行,以最长的数据框中的行为准。结果merged_df包含合并数据。 4.保存数据:最后,我们可以通过to_excel()函数将合并的数据保存为新Excel文件。 merged_df.to_excel("合并后的文件路径") 总之,使用Pandasmerge()函数可以非常方便地将多个Excel数据表合并为一个数据表,这将大大简化数据操作,提高数据分析的效率。 ### 回答3: PandasPython数据处理的一个强大工具,可用于读取、写入、合并和处理各种数据格式,包括Excel文件。在Pandas中,merge是一种合并数据的方法,可以在不同的DataFrame之间共享相同的列名,并将它们合并成一张表。 要在Pandas合并Excel文件,需要首先加载Excel文件,使用Pandas库的read_excel函数可以读取Excel文件,它将Excel文件读取为Pandas DataFrame。 例如: import pandas as pd file1 = pd.read_excel('file1.xlsx') file2 = pd.read_excel('file2.xlsx') 此时可以使用merge函数将两个DataFrame对象进行合并。需要注意的是,在进行merge操作之前需要确认两个DataFrame中需要合并的列名,这样才能确保merge操作的正确性。 例如,合并file1和file2的'Student ID'列: merged_file = pd.merge(file1, file2, on='Student ID') 此时合并后的DataFrame将包含file1和file2中的所有行,并且只保留包含共同的'Student ID'的行。如果有名称不同的列需要合并,可以使用left_on和right_on。 例如: merged_file = pd.merge(file1, file2, left_on='ID', right_on='Student ID') 在合并之后,可以使用to_excel方法将合并后的结果写入一个新的Excel文件中,代码如下: merged_file.to_excel('merged_file.xlsx',index=False) 可以设置index参数将DataFrame中的索引排除在输出文件之外,这是为了减轻文件大小并避免任何可能的索引问题。 总的来说,Pandas库的merge方法使合并Excel文件变得非常简单和容易,在任何需要合并多个Excel文件或多个DataFrame的情况下,这些步骤都是非常实用和有用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睿科知识云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值