pandas.DataFrame.merge#
- DataFrame.merge(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连接行为不同,可能会导致意外的结果。
- 参数
- 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的序列,其中每个元素都是可选的字符串,指示要添加到中的重叠列名的后缀 left 和 right 分别为。将值传递给 None 而不是用来指示列名来自 left 或 right 应保留原样,不带后缀。其中至少有一个值不能为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
使用指数的类似方法。
注意事项
支持将索引级别指定为 on , left_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