语法结构
pd.merge()可以将两个 DataFrame 或者 Series 进行连接:
pd.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=True, indicator=False, validate=None,)
参数:
how:连接方式,默认为inner,可设为inner/outer/left/right
on:根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on 和 right_on 来设置)
left_on:左连接,以DataFrame1中用作连接键的列
right_on:右连接,以DataFrame2中用作连接键的列
left_index:bool, default False,将DataFrame1行索引用作连接键
right_index:bool, default False,将DataFrame2行索引用作连接键
sort:根据连接键对合并后的数据进行排列,默认为True
suffixes:对两个数据集中出现的重复列,新数据集中加上后缀 _x, _y 进行区别
参数:left和right
pd.merge()只能用于两个表的拼接,而且通过参数名称也能看出连接方向是左右拼接,一个左表一个右表,而且参数中没有指定拼接轴的参数,所以pd.merge()不能用于表的上下拼接。
参数:on
这个参数确定哪个字段作为主键,(on为两个数据的连接键)
例如:


这两个表能够看出有两列列名是一样的,工号和员工姓名,而且自己看的话还能发现索引是5的记录虽然员工姓名一样但是工号不一样,有可能一个公司中出现了重名的员工,我们对这两个表进行拼接。
不指定主键的情况下:

由于pd.merge()默认的是内连接,所以只把主键信息相同的部分拼接,而工号和员工姓名完全一致的只有工号是004的信息
指定主键拼接:

参数left_index和right_index
除了指定字段作为主键以外,还可以考虑用索引作为拼接的主键,left_index和right_index默认为False,就是不以索引作为主键,如果想用索引作为拼接的主键,把left_index和right_index设置为Ture就可以了。
参数:how
how参数控制拼接方式,默认内连接(inner),可设为inner/outer/left/right
how='left' # 以左为表基表
how='right' # 以右为表基表
how='outer' # 取两个表的合集
how='inner' # 取两个表的交集
how=’outer’ # 取两个表的合集
保留两个表的所有信息,拼接的时候遇到标签不能对齐的部分,用NAN进行填充

how=’left’ # 以左为表基表
左连接是保留所有左表的信息,把右表中主键与左表一致的信息拼接进来,标签不能对齐的部分,用NAN进行填充:

how=’right’ # 以右为表基表
右连接是保留所有右表的信息,把左表中主键与左表一致的信息拼接进来,标签不能对齐的部分,用NAN进行填充:

参数:left_on和right_on
有的时候还会有这种情况,两个表里没有完全一致的列名,但是有信息一致的列,例如下边这种情况,都有”员工姓名”这一列,但是名字不一样:


这个时候需要指定每个表中用来做主键的字段是哪一个,就用到了left_on和right_on这两个参数
参数:sort=True
sort对链接的键值进行排序:紧接着上一例,设置sort= True
参数:indicator
在pd.concat()中可以通过参数设定显示拼接后的表中哪些信息来自于哪一个表格,在pd.merge()中也可以进行这样的操作,就是通过indicator参数设置,默认是False不显示数据来源,把参数设置为True就可以了。

这样在表的最后就会有一个新列,显示这一条记录来自于在哪表格里有数据,如果两表都有数据会标记both。