一、merge
merge操作实现两个DataFrame之间的合并,类似于sql两个表之间的关联查询。
merge的使用方法及参数解释如下:
pd.merge(left, right, on=None, how='inner', left_on=None, right_on=None, left_index=False, right_index=False,
sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
left和right:第一个DataFrame和第二个DataFrame对象,merge只能实现两个DataFrame的合并,无法一次实现多个合并
on:指定参考column,要求两个df必须至少有一个相同的column,默认为None以最多相同的column为参考
how:合并的方式,默认为inner取参考column的交集,outer取并集保留所有行,outer、left、right中的缺失值都以NaN填充
left按照左边对象为参考进行合并即保留左边的所有行,right按照右边对象为参考进行合并即保留右边所有行,
left_on=None和right_on=None:以上on是在两个df有相同的column的情况下使用,如果两个df没有相同的column,使用left_on和right_on分别指明左边和右边的参考column
left_index和right_index:指定是否以索引为参考进行合并
sort:合并结果是否按参考排序
suffixed:合并后如果有重复column,分别加上什么后缀
下面对每个参数进行演示
on:指定参考column,如果不指定默认为None,以两者相同列的最多数为参考;index重新生成为从0开始的整数。
df1 = pd.DataFrame({ 'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']},index=['k','l','m','n',]) df2 = pd.DataFrame({ 'key1':['a','B','c','d'],'key2':['e','f','g','H'],'key4':['i','j','K','L']},index = ['p','q','u','v']) print(df1) print(df2) print(pd.merge(df1,df2,on='key1')) print(pd.merge(df1,df2,on='key2')) print(pd.merge(df1,df2,on=['key1','key2'])) print(pd.merge(df1,df2)) #可以看到不加on参数,系统自动以个数最多的相同column为参考 # key1 key2 key3 # k a e i # l b f j # m c g k # n d h l # key1 key2 key4 # p a e i # q B f j # u c g K # v d H L # key1 key2_x key3 key2_y key4 # 0 a e i e i # 1 c g k g K # 2 d h l H L # key1_x key2 key3 key1_y key4 # 0 a e i a i # 1 b f j B j # 2 c g k c K # key1 key2 key3 key4 # 0 a e i i # 1 c g k K # key1 key2 key3 key4 # 0 a e i i # 1 c g k K
how:指定合并方式,如果不指定默认为inner
inner相当于sql中的=,outer相当于sql中的full join,left相当于sql中的left join,right相当于sql中的right join;index重新生成为从0开始的整数。
对于outer、left、right来说可能会出现缺失值,全部以NaN填充。
df1 = pd.DataFrame({ 'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']},index=['k','l','m','n',]) df2 = pd.DataFrame({ 'key1':['a','B','c','d'],'key2':['e','f','g','H'],'key4':['i','j','K','L']},index = ['p','q','u','v']) print(df1) print(df2) print(pd.merge(df1,df2,how='inner')) #默认方式,取交集 print(pd.merge(df1,df2,how='outer')) #取并集 print(pd.merge(df1,df2,how='left')) #以左边为参考,即保留左边所有行 print(pd.merge(df1,df2,how='right')) #以右边为参考,即保留右边所有行 # key1 key2 key3 # k a e i # l b f j # m c g k # n d h l # key1 key2 key4