Python技术迷

Pandas 教程-Pandas DataFrame.merge()

整理:python架构师

Pandas的merge()被定义为将两个数据集合并成一个并根据共同的属性或列对齐行的过程。这是DataFrame对象之间所有标准数据库连接操作的入口:

语法:

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

参数:

  • right: DataFrame或命名Series 与DataFrame合并的对象。

  • how: {'left', 'right', 'outer', 'inner'},默认为 'inner'

    要执行的合并类型。

    • left: 仅使用左框架的键,类似于SQL左外连接;保留键顺序。

    • right: 仅使用右框架的键,类似于SQL右外连接;保留键顺序。

    • outer: 使用两个框架键的并集,类似于SQL全外连接;按词典顺序排序键。

    • inner: 使用两个框架键的交集,类似于SQL内连接;保留左键的顺序。

  • on: 标签或列表 要加入的列或索引级别名称。它必须在左右两个DataFrame中都找到。如果on为None且不在索引上合并,则默认为两个DataFrame中列的交集。left_on: 标签或列表,或类似数组 从左侧DataFrame中用作键的列或索引级别名称。它可以是一个长度等于DataFrame长度的数组。

  • right_on: 标签或列表,或类似数组 从右侧DataFrame中用作键的列或索引级别名称。它可以是一个长度等于DataFrame长度的数组。

  • left_index:布尔值,默认为False 如果为True,则使用左侧DataFrame的索引作为连接键。在多重索引(分层)的情况下,其他DataFrame中的许多键(索引或某些列)应该与级别的数量相匹配。

  • right_index:布尔值,默认为False 使用右侧DataFrame的索引作为连接键。它的使用方式与left_index相同。

  • sort:布尔值,默认为False 如果为True,则按字典顺序对结果DataFrame中的连接键进行排序。否则,连接键的顺序取决于连接类型(how关键字)。

  • suffixes:字符串元组,默认为('x', 'y') 用于重叠左右DataFrame中列名的后缀,分别是左DataFrame和右DataFrame。如果有重叠,则使用(False,False)值会在重叠时引发异常。

  • copy:布尔值,默认为True 如果为True,则返回DataFrame的副本。否则,它可以避免复制。

  • indicator:布尔值或字符串,默认为False

    如果为True,则在输出DataFrame中添加一个名为"_merge"的列,其中包含每行信息的源。如果它是一个字符串,将在输出DataFrame中添加一个包含每行信息的列,并将该列命名为字符串的值。信息列被定义为分类类型,它的值为:

    • "left_only":对于观察结果的合并键仅出现在DataFrame的'left'中,

    • "right_only":为合并键仅出现在DataFrame的'right'中的观察,

    • "both":如果观察的合并键在两者中都找到。

  • validate:字符串,可选

    如果指定,它检查给定的合并类型,如下所示:

    • "one_to_one"或"1:1":检查合并键在左右两个数据集中是否唯一。

    • "one_to_many"或"1:m":仅检查合并键在左侧数据集中是否唯一。

    • "many_to_one"或"m:1":仅检查合并键在右侧数据集中是否唯一。

    • "many_to_many"或"m:m":允许,但不进行检查。

专属福利 
👉点击领取:最全Python资料合集

示例1:在一个键上合并两个DataFrame

# import the pandas library  import pandas as pd  left = pd.DataFrame({     'id':[1,2,3,4],     'Name': ['John', 'Parker', 'Smith', 'Parker'],     '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 John sub11 2 Parker sub22 3 Smith sub43 4 Parker sub6
id Name subject_id
0 1 William sub21 2 Albert sub42 3 Tony sub33 4 Allen sub6

示例2:在多个键上合并两个DataFrame:

import pandas as pd  left = pd.DataFrame({     'id':[1,2,3,4,5],     'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],     'subject_id':['sub1','sub2','sub4','sub6','sub5']})  right = pd.DataFrame({      'id':[1,2,3,4,5],     'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],     'subject_id':['sub2','sub4','sub3','sub6','sub5']})  print pd.merge(left,right,on='id')
输出
    id   Name_x    subject_id_x   Name_y     subject_id_y0   1     John      sub1          William     sub21   2     Parker    sub2          Albert      sub42   3     Smith     sub4          Tony        sub33   4     Parker    sub6          Allen       sub6
Image
 1
Image
热门推荐

Image