pandas.merge#

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)[源代码]#

将DataFrame或命名系列对象与数据库样式联接合并。

命名的Series对象被视为具有单个命名列的DataFrame。

联接是在列或索引上完成的。如果在列上联接列,则DataFrame索引 将被忽略 。否则,如果联接索引上的索引或一列或多列上的索引,则索引将被传递。执行交叉合并时,不允许对任何列规范进行合并。

警告

如果两个键列都包含键为空值的行,则将对这些行进行相互匹配。这与通常的SQL连接行为不同,可能会导致意外的结果。

参数
leftDataFrame
rightDataFrame或命名系列

要合并的对象。

how{‘左’,‘右’,‘外’,‘内’,‘十字’},默认‘内’

要执行的合并的类型。

  • LEFT:仅使用左帧中的关键点,类似于SQL LEFT OUTER JOIN;保持关键点顺序。

  • Right:仅使用右侧框架中的关键点,类似于SQL Right Out Join;保持关键点顺序。

  • 外部:使用来自两个帧的键的联合,类似于SQL完全外部联接;按词典顺序对键进行排序。

  • 内部:使用来自两个帧的关键点的交集,类似于SQL内部联接;保持左侧关键点的顺序。

  • 十字:从两个帧创建笛卡尔积,保留左关键点的顺序。

    1.2.0 新版功能.

on标签或列表

要联接的列或索引级名称。必须在两个DataFrame中都找到它们。如果 on 为None且不合并索引,则默认为两个DataFrame中的列的交集。

left_on标签或列表,或类似数组

左侧DataFrame中要联接的列或索引级名称。也可以是左DataFrame长度的数组或数组列表。这些数组被视为列。

right_on标签或列表,或类似数组

要在正确的DataFrame中联接的列或索引级名称。也可以是具有正确DataFrame长度的数组或数组列表。这些数组被视为列。

left_index布尔值,默认为False

使用左侧DataFrame中的索引作为联接键。如果它是多索引,则其他DataFrame中的键数(索引或列数)必须与级别数匹配。

right_index布尔值,默认为False

使用右侧DataFrame中的索引作为联接键。与LEFT_INDEX相同的警告。

sort布尔值,默认为False

在结果DataFrame中按词典顺序对连接键进行排序。如果为False,则联接键的顺序取决于联接类型(How关键字)。

suffixes列表式,默认为(“_x”,“_y”)

长度为2的序列,其中每个元素都是可选的字符串,指示要添加到中的重叠列名的后缀 leftright 分别为。将值传递给 None 而不是用来指示列名来自 leftright 应保留原样,不带后缀。其中至少有一个值不能为None。

copy布尔值,默认为True

如果为False,请尽可能避免复制。

indicatorBool或str,默认为False

如果为True,则向输出DataFrame添加一个名为“_Merge”的列,其中包含有关每行的源的信息。通过提供字符串参数,可以为该列指定不同的名称。对于其合并关键字仅出现在左侧DataFrame中的观测,该列将具有值为“Left_Only”的分类类型;对于其合并关键字仅出现在右侧DataFrame中的观测,该列将具有值“Right_Only”;如果在两个DataFrame中都找到了观测的合并关键字,则该列将具有值“Both”。

validate字符串,可选

如果指定,则检查合并是否为指定类型。

  • “one_to_one”或“1:1”:检查合并项在左侧和右侧数据集中是否唯一。

  • “One_to_Many”或“1:m”:检查合并项在左侧数据集中是否唯一。

  • “多对一”或“m:1”:检查合并项在正确的数据集中是否是唯一的。

  • “MANY_TO_MANY”或“m:m”:允许,但不会导致检查。

退货
DataFrame

两个合并对象的DataFrame。

参见

merge_ordered

与可选的填充/内插合并。

merge_asof

在最近的关键点上合并。

DataFrame.join

使用指数的类似方法。

注意事项

支持将索引级别指定为 onleft_on ,以及 right_on 版本0.23.0中添加了参数,版本0.24.0中添加了对合并命名系列对象的支持

示例

>>> df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
...                     'value': [1, 2, 3, 5]})
>>> df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
...                     'value': [5, 6, 7, 8]})
>>> df1
    lkey value
0   foo      1
1   bar      2
2   baz      3
3   foo      5
>>> df2
    rkey value
0   foo      5
1   bar      6
2   baz      7
3   foo      8

合并lkey和rkey列上的df1和df2。值列附加了默认后缀_x和_y。

>>> df1.merge(df2, left_on='lkey', right_on='rkey')
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        1  foo        8
2  foo        5  foo        5
3  foo        5  foo        8
4  bar        2  bar        6
5  baz        3  baz        7

合并数据帧df1和df2,并将指定的左后缀和右后缀附加到任何重叠的列。

>>> df1.merge(df2, left_on='lkey', right_on='rkey',
...           suffixes=('_left', '_right'))
  lkey  value_left rkey  value_right
0  foo           1  foo            5
1  foo           1  foo            8
2  foo           5  foo            5
3  foo           5  foo            8
4  bar           2  bar            6
5  baz           3  baz            7

合并DataFrames df1和df2,但如果DataFrames有任何重叠的列,则引发异常。

>>> df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))
Traceback (most recent call last):
...
ValueError: columns overlap but no suffix specified:
    Index(['value'], dtype='object')
>>> df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]})
>>> df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]})
>>> df1
      a  b
0   foo  1
1   bar  2
>>> df2
      a  c
0   foo  3
1   baz  4
>>> df1.merge(df2, how='inner', on='a')
      a  b  c
0   foo  1  3
>>> df1.merge(df2, how='left', on='a')
      a  b  c
0   foo  1  3.0
1   bar  2  NaN
>>> df1 = pd.DataFrame({'left': ['foo', 'bar']})
>>> df2 = pd.DataFrame({'right': [7, 8]})
>>> df1
    left
0   foo
1   bar
>>> df2
    right
0   7
1   8
>>> df1.merge(df2, how='cross')
   left  right
0   foo      7
1   foo      8
2   bar      7
3   bar      8