Pandas 中不同类型的连接


Pandas 是一个流行的库,用于执行数据分析和数据操作。它有许多高级功能可以处理表格数据,例如根据公共列或列索引将多个数据框连接成一个。

在 Python 中,可以使用 **merge()** 函数以及 pandas 库的 how 参数执行不同类型的连接。以下是不同的连接类型。

  • 内连接 (Inner Join)

  • 外连接 (Outer Join)

  • 左连接 (Left Join)

  • 右连接 (Right Join)

  • 交叉连接 (Cross Join)

内连接 (Inner Join)

Pandas 库中的内连接将返回在两个已定义数据框中具有相同值的行以及输出结果。我们可以观察到数据框中具有相同列的列。以下是应用于数据框的内连接语法。

import pandas as pd
pd.merge(dataframe1,dataframe2,how=’inner’

其中:

  • **pandas** 是库的名称。

  • **pd** 是别名。

  • **merge** 是执行连接操作的函数。

  • **how** 指定连接操作的类型。

示例

在这个示例中,我们将两个数据框以及 'how' 参数传递给 **merge()** 函数,并赋值为 **内连接**。以下是代码。

import pandas as pd
dic1 = {"Name": ["John","Mark","Nancy","Sita","Ram"],
       "Age": [20,40,78,90,38],
       "Language" : ["Python","Java","C","Python","Salesforce"]}

dic2 = {"Name": ["John","Mark","Nancy","Sita","Ram"],
       "Age": [20,40,78,90,38],
       "class" : [10,9,12,9,5]}

data1 = pd.DataFrame(dic1)
print(data1)
data2 = pd.DataFrame(dic2)
print(data2)
inner_join = pd.merge(data1,data2,how = "inner")
inner_join.head()

输出

    Name  Age    Language
0   John   20      Python
1   Mark   40        Java
2  Nancy   78           C
3   Sita   90      Python
4    Ram   38  Salesforce

    Name  Age  class
0   John   20     10
1   Mark   40      9
2  Nancy   78     12
3   Sita   90      9
4    Ram   38      5

外连接 (Outer Join)

外连接将返回两个数据框的所有行,如果行中存在任何缺失数据,则它将填充空值。以下是应用于数据框的外连接语法。

import pandas as pd
pd.merge(dataframe1,dataframe2,how=’outer’

示例

import pandas as pd
dic1 = {"Name": ["John","Mark","Nancy","Sita","Ram"],
       "Age": [20,40,78,90,38],
       "Language" : ["Python","Java","C","Python","Salesforce"]}

dic2 = {"Name": ["John","Nancy","Sita","Ram"],
       "Age": [20,40,70,38],
       "class" : [10,12,9,5]}

data1 = pd.DataFrame(dic1)
print(data1)
data2 = pd.DataFrame(dic2)
print(data2)
inner_join = pd.merge(data1,data2,how = "outer")
inner_join.head()

输出

    Name  Age    Language
0   John   20      Python
1   Mark   40        Java
2  Nancy   78           C
3   Sita   90      Python
4   Ram   38  Salesforce
    Name  Age  class
0   John   20     10
1  Nancy   40     12
2   Sita   70      9
3    Ram   38      5

左连接 (Left Join)

左连接返回左数据框的全部行以及右数据框的所有匹配行。如果右数据框中没有匹配行,则输出数据框将在相应的列中填充空值。以下是应用左连接的语法。

import pandas as pd
pd.merge(dataframe1,dataframe2,how=’left’

示例

在此示例中,我们将对两个输入数据框应用左连接,然后返回左连接的输出。

import pandas as pd
dic1 = {"Name": ["John","Mark","Nancy","Sita","Ram"],
       "Age": [2,40,78,90,38],
       "Language" : ["Python","Java","C","Python","Salesforce"]}

dic2 = {"Name": ["John","Nancy","Sita","Ram"],
       "Age": [20,40,70,38],
       "class" : [10,12,9,5]}

data1 = pd.DataFrame(dic1)
print(data1)
data2 = pd.DataFrame(dic2)
print(data2)
inner_join = pd.merge(data1,data2,how = "left")
inner_join.head()

输出

    Name  Age    Language
0   John    2      Python
1   Mark   40        Java
2  Nancy   78           C
3   Sita   90      Python
4    Ram   38  Salesforce
    Name  Age  class
0   John   20     10
1  Nancy   40     12
2   Sita   70      9
3    Ram   38      5

右连接 (Right Join)

右连接返回右数据框的全部行以及左数据框的所有匹配行。如果左数据框中没有匹配行,则输出数据框将在相应的列中填充空值。以下是应用右连接的语法。

import pandas as pd
pd.merge(dataframe1,dataframe2,how=’right’

示例

在这个示例中,我们将对两个输入数据框应用右连接,然后返回右连接的输出。

import pandas as pd
dic1 = {"Name": ["John","Mark","Nancy","Sita","Ram"],
       "Age": [2,40,78,90,38],
       "Language" : ["Python","Java","C","Python","Salesforce"]}

dic2 = {"Name": ["John","Nancy","Sita","Ram"],
       "Age": [20,40,70,38],
       "class" : [10,12,9,5]}

data1 = pd.DataFrame(dic1)
print(data1)
data2 = pd.DataFrame(dic2)
print(data2)
inner_join = pd.merge(data1,data2,how = "right")
inner_join.head()

输出

   Name  Age    Language
0   John    2      Python
1   Mark   40        Java
2  Nancy   78           C
3   Sita   90      Python
4    Ram   38  Salesforce
    Name  Age  class
0   John   20     10
1  Nancy   40     12
2   Sita   70      9
3    Ram   38      5

交叉连接 (Cross Join)

交叉连接返回两个数据框的笛卡尔积;这意味着它返回两个数据框中所有行的所有可能组合。

更新于:2023年10月20日

230 次查看

开启您的 职业生涯

完成课程获得认证

开始学习
广告