一、merge函数
pandas提供了一个类似关系数据库的连接(join)操作的方法merge,可以根据一个或多个键将不同DataFrame中的行连接起来。
准备数据以便进行说明:
df1= pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df3 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3']})
merge语法说明:
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
1、left和right
pd.merge()只能用于两个表的拼接,且用于左右连接。
如果需要拼接的两个表中,有相同的列信息,那么进行拼接的时候即使不指定以哪个字段为主键,函数也会默认用信息相同的列做主键对两个表进行拼接。
df1
df2
可以看出df1和df2两个表中字段‘key1’是重复列,所以在使用pd.merge()拼接时不用指定主键,直接把一个表的名字传递给参数left,另一个表的名字传递给参数right即可。
2、参数on
如果两张表有两列以上信息相同,可以指定哪一列作为主键,如果不指定,相同信息的列都会作为拼接依据。
3、参数how
- how参数控制拼接方式,默认内连接(inner),那么不同的拼接方式对结果有怎样的影响呢,内连接是只将两个表主键一致的信息拼接到一起。
- 左连接是保留所有左表的信息,把右表中主键与左表一致的信息拼接进来,标签不能对齐的部分,用NAN进行填充。
-
右连接是保留所有右表的信息,把左表中主键与左表一致的信息拼接进来,标签不能对齐的部分,用NAN进行填充。
4、参数lefton和righton
两个表里没有完全一致的列名,但是有信息一致的列,这个时候需要指定每个表中用来做主键的字段是哪一个,就用到了lefton和righton这两个参数。
5、参数suffixes
有时候两个表中有好几个相同的列名,除了作为主键的列之外,其他名字相同的列被拼接到表中的时候会有一个后缀表示这个列来自于哪个表格,用于区分名字相同的列,这个后缀默认是(x和y)
6、 参数indicator
在pd.concat()中可以通过参数设定显示拼接后的表中哪些信息来自于哪一个表格,在pd.merge()中也可以进行这样的操作,就是通过indicator参数设置,默认是False不显示数据来源,把参数设置为True就可以了。
merge函数的作用是将两个pandas对象横向合并,遇到重复的索引项时会使用笛卡尔积,默认inner连接,可选left、outer、right连接。常用应用场景:针对同一个主键存在两张包含不同字段的表,将其整合到一张表里。
df1
所谓左连接,就是指以第一个表索引为基准,右边的表中如果不在左边的的则不加入,如果在左边的,就以笛卡尔积的方式加入。
merge/join与concat的不同之处在于on参数,可以指定某一个对象为key来进行连接。
-
笛卡尔积
笛卡尔积是指在数学中,两个集合X和Y的笛卡尔积,又称直积,表示为X xY。第一个对象是X的成员,而第二个对象是Y的所有可能有序对的其中一个成员。
concat是上下拼接。
网友评论