📜  如何使用 Merge 加入 Pandas DataFrames?

📅  最后修改于: 2022-05-13 01:54:52.168000             🧑  作者: Mango

如何使用 Merge 加入 Pandas DataFrames?

加入和合并 DataFrames 是从数据分析和机器学习任务开始的核心过程。它是每个数据分析师或数据科学家都应该掌握的工具包之一,因为在大多数情况下,数据来自多个来源和文件。在本教程中,您将学习如何使用合并技术在 pandas 中连接数据框。更具体地说,我们将练习沿行和列连接 DataFrame。

入门

与 DataFrames 相关的最广泛使用的操作是合并操作。两个 DataFrame 可能包含有关同一实体的不同类型的信息,并且它们可能具有相同的列,因此我们需要在 pandas 中组合这两个数据帧以获得更好的可靠性代码。为了加入这些 DataFrame,pandas 提供了各种函数,如 join()、concat()、merge() 等。在本节中,您将练习使用 pandas 的 merge()函数。

基本上有四种合并方法:

  • 内部联接
  • 外连接
  • 右加入
  • 左连接

内部联接

从名称本身可以清楚地看出,内连接保留了左右数据帧中存在合并“on”值的行。

现在让我们创建两个数据框,然后尝试使用内部合并它们。

import numpy as np
import pandas as pd
  
  
left = pd.DataFrame({'Sr.no': ['1', '2', '3', '4', '5'], 
                    'Name': ['Rashmi', 'Arun', 'John', 
                             'Kshitu', 'Bresha'], 
                    'Roll No': ['1', '2', '3', '4', '5']}) 
  
right = pd.DataFrame({'Sr.no': ['2', '4', '6', '7', '8'], 
                    'Gender': ['F', 'M', 'M', 'F', 'F'], 
                    'Interest': ['Writing', 'Cricket', 'Dancing',
                                 'Chess', 'Sleeping']}) 
                          
# Merging the dataframes                     
pd.merge(left, right, how ='inner', on ='Sr.no') 

输出:

外连接

外连接返回左侧数据帧中的所有行,右侧数据帧中的所有行,并在可能的情况下匹配行,在其他地方使用 NaN。但是如果数据帧是完整的,那么我们会得到相同的输出。

import numpy as np
import pandas as pd
  
  
left = pd.DataFrame({'Sr.no': ['1', '2', '3', '4', '5'], 
                    'Name': ['Rashmi', 'Arun', 'John',
                             'Kshitu', 'Bresha'], 
                    'Roll No': ['1', '2', '3', '4', '5']}) 
  
right = pd.DataFrame({'Sr.no': ['2', '4', '6', '7', '8'], 
                    'Gender': ['F', 'M', 'M', 'F', 'F'], 
                    'Interest': ['Writing', 'Cricket', 'Dancing', 
                                 'Chess', 'Sleeping']}) 
                          
# Merging the dataframes                     
pd.merge(left, right, how ='outer', on ='Sr.no')

输出:

左连接

使用左连接,将显示第一个数据帧中的所有记录,而不管第一个数据帧中的键是否可以在第二个数据帧中找到。而对于第二个数据帧,只会显示在第一个数据帧中可以找到的具有第二个数据帧中的键的记录。

import numpy as np
import pandas as pd
  
  
left = pd.DataFrame({'Sr.no': ['1', '2', '3', '4', '5'], 
                    'Name': ['Rashmi', 'Arun', 'John', 
                             'Kshitu', 'Bresha'], 
                    'Roll No': ['1', '2', '3', '4', '5']}) 
  
right = pd.DataFrame({'Sr.no': ['2', '4', '6', '7', '8'], 
                    'Gender': ['F', 'M', 'M', 'F', 'F'], 
                    'Interest': ['Writing', 'Cricket', 
                                 'Dancing', 'Chess', 
                                 'Sleeping']}) 
                          
# Merging the dataframes                     
pd.merge(left, right, how ='left', on ='Sr.no')

输出:

仔细注意输出。

右加入

对于右连接,将显示来自第二个数据框的所有记录。但是,只会显示在第二个数据帧中可以找到的第一个数据帧中具有键的记录。

import numpy as np
import pandas as pd
  
  
left = pd.DataFrame({'Sr.no': ['1', '2', '3', '4', '5'], 
                    'Name': ['Rashmi', 'Arun', 'John',
                             'Kshitu', 'Bresha'], 
                    'Roll No': ['1', '2', '3', '4', '5']}) 
  
right = pd.DataFrame({'Sr.no': ['2', '4', '6', '7', '8'], 
                    'Gender': ['F', 'M', 'M', 'F', 'F'], 
                    'Interest': ['Writing', 'Cricket', 'Dancing', 
                                 'Chess', 'Sleeping']}) 
                          
# Merging the dataframes                     
pd.merge(left, right, how ='right', on ='Sr.no') 

输出: