DataFrame.merge(self, 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' [source]
用数据库样式的联接合并DataFrame
或命名的Series
对象。
联接在列或索引上完成。如果在列上连接列,则DataFrame
索引将被忽略。否则,如果在索引上连接索引或在一个或多个列上建立索引,则将传递索引。
参数: | right : 要合并的对象。 how: 默认 要执行的合并类型。 1) left:仅使用左框架中的键, 类似于SQL左外部联接;保留关键顺序 2) right:仅使用右框架中的键, 类似于SQL右外部联接;保留关键顺序 3) outer:使用两个框架中键的并集, 类似于SQL完全外部联接;按字典顺序排序键 4) inner:使用两个框架中关键点的交集, 类似于SQL内部联接;保留左键的顺序 on:label或list 要加入的列或索引级别名称。 这些必须在两个DataFrame中都可以找到。 如果on为None且未在索引上合并, 则默认为两个DataFrame中列的交集。 left_on: 要在左侧DataFrame中加入的列或索引级别名称。 也可以是左侧DataFrame长度的数组或数组列表。 这些数组被视为列。 right_on:标签或列表,或类似数组 要在右侧DataFrame中加入的列或索引级别名称。 也可以是正确DataFrame长度的数组或数组列表。 这些数组被视为列。 left_index:布尔值,默认为 使用左侧DataFrame中的索引作为连接键。 如果它是MultiIndex, 则另一个DataFrame中的键数(索引或列数) 必须与级别数匹配 right_index:布尔值,默认为 使用右侧DataFrame中的索引作为连接键。 与left_index相同的警告 sort:布尔值,默认为 在结果DataFrame中按字典顺序对联接键进行排序。 如果为 (how关键字) suffixes:2个长度的序列(元组,列表等) suffixes分别应用于左侧和右侧的重叠列名 copy:布尔值,默认为 如果为 indicator:布尔值或字符串,默认为 如果为 称为 如果为字符串,则将在每一行的源上带有信息的列, 添加到输出DataFrame中, 并将该列命名为字符串的值。信息列是分类类型的, 对于其合并键仅出现在 其值为
如果两者中都存在观察值的合并键。 validate:字符串,默认为 如果指定,则检查合并是否为指定的类型。
检查合并键在左右数据集中是否唯一。
检查合并键在左数据集中是否唯一。
检查合并键在正确的数据集中是否唯一。
允许,但不进行检查。 0.21.0版中的新功能。 |
返回值: |
如果输出类型是DataFrame的子类, 则其输出类型将与“left”相同。 |
Notes
在版本0.23.0中添加了对将索引级别指定为on
,left_on
和right_on
参数的支持,在版本0.24.0中添加了对合并命名系列对象的支持。
例子
1) 内连接(inner join,默认)
只保留两个表中匹配到的部分(交集)。
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df2 = pd.DataFrame({ 'id': [1, 2, 4], 'age': [24, 25, 23] }) result = df1.merge(df2, on='id', how='inner') print(result)
2)左连接(left join)
保留左表全部数据,右表匹配上就带上,匹配不上就是 NaN
。
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df2 = pd.DataFrame({ 'id': [1, 2, 4], 'age': [24, 25, 23] }) result = df1.merge(df2, on='id', how='left') print(result)
3)右连接(right join)
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df2 = pd.DataFrame({ 'id': [1, 2, 4], 'age': [24, 25, 23] }) result = df1.merge(df2, on='id', how='right') print(result)
4)外连接(outer join)
保留所有数据,不匹配的填 NaN
。
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df2 = pd.DataFrame({ 'id': [1, 2, 4], 'age': [24, 25, 23] }) result = df1.merge(df2, on='id', how='outer') print(result)
5)指定不同的键合并(left_on, right_on)
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df3 = pd.DataFrame({ 'user_id': [1, 2, 4], 'age': [24, 25, 23] }) result = df1.merge(df3, left_on='id', right_on='user_id', how='inner') print(result)
6)索引合并
import pandas as pd df1 = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) df2 = pd.DataFrame({ 'id': [1, 2, 4], 'age': [24, 25, 23] }) df1.set_index('id', inplace=True) df2.set_index('id', inplace=True) result = df1.merge(df2, left_index=True, right_index=True, how='inner') print(result)