Pandas merge()将两个数据集合并为一个,并根据公共属性或列对齐行。它是DataFrame对象之间所有标准数据库联接操作的入口点:
merge - 语法
pd.merge(left, right, how=inner, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
merge - 参数
- right - DataFrame或命名为Series 它是一个与DataFrame合并的对象。
-
how - {left,right,outer,inner},默认的" inner"
要执行的合并类型。
- left - 它仅使用左框架中的键,类似于SQL左外部联接;保留键顺序。
- right - 它仅使用右框架中的键,类似于SQL右外部联接;保留键顺序。
- outer - 它使用了两个框架中的键并集,类似于SQL完全外部联接;按字典顺序对键进行排序。
- inner - 它使用两个框架中关键点的交集,类似于SQL内部联接。保留左键的顺序。
- on - 标签或列表,它是要连接的列或索引级别的名称。
- left_on - 标签或列表,或类似数组的 它是左侧DataFrame中的列或索引级别名称,用作键。它可以是长度等于DataFrame长度的数组。
- right_on - 标签或列表,或类似数组的 它是来自右侧DataFrame的列或索引级别的名称,用作键。它可以是长度等于DataFrame长度的数组。
- left_index - 布尔型,默认为False 如果为true,它将使用左侧DataFrame的索引作为连接键。
- right_index - 布尔型,默认为False 它使用来自右侧DataFrame的索引作为连接键。它具有相同的用法作为left_index。
- sort - 布尔型,默认为False 如果为True,它将在结果DataFrame中按字典顺序对连接键进行排序。
- suffixes - (str,str)的元组,默认为(_x,_y) 后缀适用于分别在左侧和右侧DataFrame中重叠列名称。
- copy - 布尔型,默认为True 如果为True,则返回DataFrame的副本。 否则,可以避免复制。
-
indicator - 布尔值或str,默认为False 如果为True,它将添加一列以输出DataFrame" _merge ",其中包含有关每一行源的信息。如果是字符串,则将在每行的源上包含信息的列添加到输出DataFrame,并将该列命名为v由于字符串。信息列定义为分类类型,其值为:
- " left_only" - 用于其合并键仅出现在DataFrame的"左侧"的观测值。
- " right_only" - 用于其合并键仅出现在DataFrame的"右侧"的观测值。
- "both" - 用于其合并键仅出现在DataFrame的"两侧"的观测值。
-
validate - str,可选 如果指定,它将检查下面给出的合并类型:
- " 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, Learnfk, 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 Learnfk 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 Learnfk sub4 Tony sub3 3 4 Parker sub6 Allen sub6