Pandas的基础操作:合并数据.merge()函数的使用

刚刚使用Python学习进行数据分析,分享一些概念和想法,希望可以大家一起讨论,如果理解或者表达有不准确的地方,请多多指点,不吝赐教,非常感谢~~

上一篇介绍《Pandas的基础操作:介绍/创建/查看数据/赋值/删除》:https://blog.csdn.net/weixin_42969619/article/details/96863875
本文是继续上一篇的内容,作为第7部分:数据的合并


7. 合并数据

(1)直接连接两个数据使用:pd.concat([df1, df2, df2, …])

  • 使用axis=0默认值合并,将数据纵向连接
df1=pd.DataFrame(np.random.randn(3,4),columns=list('ABCD'))
df2=pd.DataFrame(np.random.randn(4,3),columns=list('ACE'))

data=pd.concat([df1,df2])
data

在这里插入图片描述

  • 使用axis=1合并,将数据横向连接
df1=pd.DataFrame(np.random.randn(3,4),columns=list('ABCD'))
df2=pd.DataFrame(np.random.randn(4,3),columns=list('ACE'))

data=pd.concat([df1,df2],axis=1)
data

在这里插入图片描述

需要注意的是:
在axis=0的情况下,两个数据合并是匹配“相同列名”合并,没有匹配到的列则会创建一列新数据;结构上没有值的位置用NaN补齐
在axis=1的情况下,两个数据合并是匹配“相同行名”合并,没有匹配到的行则会创建一行新数据;结构上没有值的位置用NaN补齐

(2)关联表:

应用场景通常是针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表里

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)

参数说明:

a. on参数:表示两个对象按哪个指定列(键名)进行合并,默认值为空,即系统会自动匹配两个对象中相同列名,将其作为“连接键”

b. 如果该列在两个对象上的列名不同,则要通过 left_on, right_on来一起指定。

c. suffixes=('_x','_y') 参数指的是,当左右对象中存在同名列(除了连接键外),在结果集中的区分方式,即分别各加一个小尾巴。

d. how参数:指的是当左右两个对象中存在不重合的列时,对数据处理方式,默认值’inner’ 代表取两对象的交集;outer 代表取两对象的并集;left 和 right 分别为取一边

使用下列数据举例:

df1=pd.DataFrame({'id':['a','b','b',"c"],"name":["A","B","B","C"],'sale':np.random.randint(5,size=4)})
df2=pd.DataFrame({"id":['c',"a","d"],"name":["C","B","D"],"brand":["AA","BB","AB"]})
df3=pd.DataFrame({"id_2":["a","b","c","d"],"name":["A","B","C","D"],"price":np.arange(4)})

df1
df2
df3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 两组数据中有多个相同名称的列(on参数会默认全部匹配作为“连接键”)
# on参数全部匹配和传入参数“id”

pd.merge(df1,df2)
pd.merge(df1,df2,on="id")

在这里插入图片描述
在这里插入图片描述

两组数组中,虽然都有“name”列,但是对应"id"的元素给出了不同的定义;在df1表中"id=a"时对应的是"name=A",而在df2表中,对应的是"name=B"。所以在默认将全部相同列作为“连接键”时,只有一条数据。
  • 参数how的不同取值(默认是只显示重合的数据)
# 默认显示重合的数据,如上例子;对比取值为"left"/"right";而"outer"实际上就是结合了"left"和"right"

pd.merge(df1,df2,on="id",how="left")
pd.merge(df1,df2,on="id",how="right")

在这里插入图片描述
在这里插入图片描述

  • 想使用两组数据中列名各自不同的列作为“连接键”
# 使用df1和df3作为例子,其中包含相同列名"name";如果不传参数,会自动匹配"name"作为“连接键”

pd.merge(df1,df3,left_on="id",right_on="id_2")
pd.merge(df1,df3,left_on="id",right_on="id_2",how="left")
pd.merge(df1,df3,left_on="id",right_on="id_2",how="right")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 上面很多数据数据中,由于原数据有都有"name"列,又没有将其作为“连接键”;所以展示时,出现:“name_x"和"name_y”。使用参数suffixes 提前重新命名
pd.merge(df1,df2,left_on="id",right_on="id_2",suffixes=['_customer','_order'])

在这里插入图片描述
(3)多表联合:df1.merge(df2).merge(df3).merge(df4)

df1.merge(df2).merge(df3)

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值