pandas之DataFrame合并merge

本文详细介绍了pandas DataFrame的合并操作,包括merge、join、concat等方法,以及如何替换空值、去重和替换元素。重点讲解了merge的各种参数和使用场景,例如on、how、left_on、right_on等,以及join的默认行为和特殊情况。此外,还涵盖了concat的堆叠方式和ignore_index选项,以及如何使用combine_first和update进行数据更新。最后,文章讨论了drop_duplicates去重功能和replace元素替换功能。
摘要由CSDN通过智能技术生成

一、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
参数on演示

 

 

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值