Pandas join和merge的区别是什么

Pandas join和merge的区别是什么

在本文中,我们将介绍Pandas中join和merge的区别,以及它们在数据处理中的使用方法和示例。

阅读更多:Pandas 教程

join和merge的基本概念

在Pandas中,join和merge都是用于合并不同DataFrame的函数。它们的主要区别在于它们操作的数据集,以及合并方法的选择。

join函数是在基于索引的情况下,将两个DataFrame合并在一起。举个例子,如果我们有两个DataFrame的索引相同,我们可以使用join函数将它们合并在一起。默认情况下,join使用的是左外部合并,也就是说,它将把左边的DataFrame作为基础,将右边的DataFrame合并到左边的DataFrame上去。如果索引不同,Pandas join函数也可以根据列名进行合并。

merge函数是用于基于列的情况下,将两个DataFrame合并在一起。例如,我们有两个DataFrame,分别包含客户姓名和客户订单,我们可以使用merge函数以客户姓名作为关键字将两个DataFrame合并在一起。merge函数不仅支持内连接和外连接,也支持左连接、右连接、和交叉连接。

join的示例

我们用两个示例来演示join函数的使用。

第一个示例中,我们有两个DataFrame,其中一个有一个单独的列,另一个有两个列,我们可以使用join函数将它们合并在一起:

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
                    'D': ['D2', 'D3', 'D6', 'D7'],
                    'E': ['E2', 'E3', 'E6', 'E7']})

# 按照B列进行join
result = df1.join(df2, lsuffix='a', rsuffix='b', how='inner', on='B')

print(result)
Python

在上面的代码中,我们用join函数按照B列将两个DataFrame实现了内部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:

    A   B  C  D_a   Bb  D_b   E
2  A2  B2  C2   D2   B2  D2   E2
3  A3  B3  C3   D3   B3  D3   E3
Python

第二个示例中,我们有两个DataFrame,其中一个有一个索引,另一个有两个索引,我们可以使用join函数将它们合并在一起:

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=['I0', 'I1', 'I2', 'I3'])
df2 = pd.DataFrame({'E': ['E2', 'E3', 'E6', 'E7'],
                    'F': ['F2', 'F3', 'F6', 'F7']},
                    index=['I2', 'I3', 'I6', 'I7'])

# 按照索引进行join
result = df1.join(df2, lsuffix='a', rsuffix='b', how='outer')

print(result)
Python

在上面的代码中,我们用join函数按照索引将两个DataFrame实现了左外部合并。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:

     A   B   C   D    Eb    F
I0  A0  B0  C0  D0   NaN  NaN
I1  A1  B1  C1  D1   NaN  NaN
I2  A2  B2  C2  D2    E2   F2
I3  A3  B3  C3  D3    E3   F3
I6 NaN NaN NaN NaN    E6   F6
I7 NaN NaN NaN NaN    E7   F7
Python

merge的示例

我们用两个示例来演示merge函数的使用。

第一个示例中,我们有两个DataFrame,一个包含客户姓名和客户订单ID,另一个包含客户订单ID和订单金额,我们可以使用merge函数将它们合并在一起:

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'name': ['Alice', 'Bob', 'Charlie', 'David']})
df2 = pd.DataFrame({'key': ['K2', 'K2', 'K3', 'K4'],
                    'order_id': ['O1', 'O2', 'O3', 'O4'],
                    'amount': [100, 200, 300, 400]})

# 按照key进行merge
result = pd.merge(df1, df2, on='key', how='left')

print(result)
Python

在上面的代码中,我们用merge函数按照key列将两个DataFrame实现了左外部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:

     key     name order_id  amount
0   K0    Alice    NaN     NaN
1   K1    Bob      NaN     NaN
2   K2    Charlie O1      100.0
3   K2    Charlie O2      200.0
4   K3    David    O3      300.0
Python

第二个示例中,我们有两个DataFrame,一个包含学生姓名和科目成绩,另一个包含学生姓名和年级班级信息,我们可以使用merge函数将它们合并在一起,并使用两个关键字作为连接:

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                    'subject': ['Math', 'English', 'Science', 'History'],
                    'score': [90, 80, 85, 92]})
df2 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                    'grade': [9, 10, 9, 11],
                    'class': ['A', 'B', 'A', 'C']})

# 按照name和年级进行merge
result = pd.merge(df1, df2, on=['name', 'grade'])

print(result)
Python

在上面的代码中,我们用merge函数按照name和grade列将两个DataFrame实现了内部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:

     name  subject  score  grade class
0   Alice    Math    90      9      A
1     Bob  English   80      10     B
2  Charlie Science   85      9      A
3   David  History   92      11     C
Python

总结

相比之下,join函数更适用于基于索引的DataFrame操作,而merge函数更适用于基于列的DataFrame操作。具体选择哪个函数应该根据特定的需求来决定。对于Pandas初学者来说,学会使用这两个函数,可以大大提高数据处理的效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册