Pandas教程-Pandas DataFrame.merge()
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":允许,但不进行检查。
示例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 sub1
1 2 Parker sub2
2 3 Smith sub4
3 4 Parker sub6
id Name subject_id
0 1 William sub2
1 2 Albert sub4
2 3 Tony sub3
3 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_y
0 1 John sub1 William sub2
1 2 Parker sub2 Albert sub4
2 3 Smith sub4 Tony sub3
3 4 Parker sub6 Allen sub6