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=None, indicator=False, validate=None)[源代码]#
将 DataFrame 或命名 Series 对象与数据库风格的连接(join)进行合并。
命名的Series对象被视为具有单个命名列的DataFrame。
连接是在列或索引上完成的。如果按列连接列,则DataFrame索引*将被忽略*。否则,如果按索引连接索引或按索引连接列,则索引将被传递。执行交叉连接时,不允许指定任何连接列。
警告
如果两个键列都包含键值为null的行,则这些行将相互匹配。这与通常的SQL连接行为不同,并可能导致意外结果。
- Parameters:
- leftDataFrame 或命名的 Series
- rightDataFrame 或命名的 Series
要合并的对象。
- how{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’},默认为’inner’
执行的合并类型。
left:仅使用左侧DataFrame的键,类似于SQL的左外连接;保留键顺序。
right:仅使用右侧DataFrame的键,类似于SQL的右外连接;保留键顺序。
outer:使用两个DataFrame键的并集,类似于SQL的完全外连接;按字典顺序对键进行排序。
inner:使用两个DataFrame键的交集,类似于SQL的内连接;保留左键的顺序。
cross: 从两个 DataFrame 创建笛卡尔积,保留左键的顺序。
- on标签或列表
用于连接的列或索引级别名称。这些必须在两个DataFrame中都找到。如果`on`为None且不是按索引连接,则默认为两个DataFrame中列的交集。
- left_on标签或列表,或类数组
用于在左侧DataFrame中连接的列或索引级别名称。也可以是与左侧DataFrame长度相同的数组或数组列表。这些数组被视为列。
- right_on标签或列表,或类数组
用于在右侧DataFrame中连接的列或索引级别名称。也可以是与右侧DataFrame长度相同的数组或数组列表。这些数组被视为列。
- left_indexbool,默认 False
使用左侧DataFrame的索引作为连接键。如果它是MultiIndex,则另一个DataFrame中的键数(索引或列数)必须与级别数匹配。
- right_indexbool,默认 False
使用右侧DataFrame的索引作为连接键。与left_index具有相同的注意事项。
- sortbool,默认 False
在结果DataFrame中按字典顺序对连接键进行排序。如果为False,则连接键的顺序取决于连接类型(how关键字)。
- suffixes类列表,默认为(”_x”, “_y”)
一个长度为2的序列,其中每个元素是可选的字符串,表示要添加到`left`和`right`中重叠列名的后缀。通过提供`None`而不是字符串来表示`left`或`right`中的列名应保持不变,没有后缀。至少有一个值不能为None。
- copybool, default True
如果为False,则避免不必要的复制。
备注
copy 关键字在 pandas 3.0 中将更改行为。Copy-on-Write 将默认启用,这意味着所有带有 copy 关键字的方法都将使用惰性复制机制来延迟复制并忽略 copy 关键字。copy 关键字将在 pandas 的未来版本中移除。
通过启用 copy on write
pd.options.mode.copy_on_write = True,您可以获得未来的行为和改进。- indicator布尔值或字符串,默认为False
如果为True,则向输出DataFrame添加一个名为“_merge”的列,其中包含有关每行来源的信息。可以通过提供字符串参数来更改列名。该列将是分类类型,对于合并键仅出现在左侧DataFrame中的观测值为“left_only”,对于合并键仅出现在右侧DataFrame中的观测值为“right_only”,对于合并键同时出现在两个DataFrame中的观测值为“both”。
- validatebool, default False
如果指定,则检查合并是否为指定类型。
“one_to_one”或”1:1”:检查合并键在左侧和右侧数据集中是否唯一。
“one_to_many”或”1:m”:检查合并键在左侧数据集中是否唯一。
“many_to_one”或”m:1”:检查合并键在右侧数据集中是否唯一。
“one_to_many” or “1:m”: 检查连接键在左侧数据集中是否唯一。
- Returns:
- DataFrame
两个合并对象的DataFrame。
参见
merge_ordered具有可选填充/插值的合并。
merge_asof按最近的键合并。
DataFrame.join使用索引的类似方法。
Examples
>>> 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 bar 2 bar 6 3 baz 3 baz 7 4 foo 5 foo 5 5 foo 5 foo 8
合并 DataFrame 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 bar 2 bar 6 3 baz 3 baz 7 4 foo 5 foo 5 5 foo 5 foo 8
合并 DataFrame df1 和 df2,但如果 DataFrame 具有任何重叠列,则引发异常。
>>> 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