Pandas基础-连接merge join concat

Pandas基础-连接merge join concat,第1张

Pandas基础-连接merge join concat

以下用df1 df2 df3表示三个表格dataframe,pd表示pandas模块

 一.merge 连接

类似于SQL的join 默认是inner 内连接,基于字段的左右连接

1.最简略写法:pd.merge(df1,fd2)

注:不指定以什么字段连接会漠然按照所有列连接;不指定连接方式会默认按照内连接方式

2.参数较为完善写法:pd.merge(df1,df2,on='字段1',how='left')

on指以什么字段名连接,可以多个字段,写成列表形式:on=['字段1','字段2']

how指连接方式,有四种:left(左连接)right(右连接)outer(全连接)inner(内连接)

3.根据df1的字段和df2的索引连接

pd.merge(df1,df2,left_on='字段’,right_index=True,how='outer')

 二.join 连接  三.concat连接

1.最简略的写法 concat([df1,df2])

2.左右连接 concat([df1,df2],axis=1)

axis表示连接的轴,不写默认0,上下连接;axis=1表示左右连接

concat会将列表中的元素拼接起来,因此df需要构成一个列表

frames=[df1,df2,df3]

pd.concat(frames)

pd.concat(frames,join='inner') join连接方式有两种inner/outer

默认上下连接,即类似SQL的union,区别是会根据字段名称连接,例如:

z1=pd.Dataframe({'A列':[1,2,3],'B列':[4,4,5],'C列':[7,7,9]},index=['X','Y','Z'])
z2=pd.Dataframe({'A列':[1,2,3],'B列':[4,4,5],'C列':[7,7,9]},index=['x','y','z'])
z3=pd.Dataframe({'n列':[1,2,3],'m列':[4,4,5],'p列':[7,7,9]},index=['R','S','T'])

pd.concat([z1,z2,z3])

输出结果如下:

 问:index相同会合并吗?

# 试验index对连接的影响

z1=pd.Dataframe({'A列':[1,2,3],'B列':[4,4,5],'C列':[7,7,9]})
z2=pd.Dataframe({'A列':[1,2,3],'B列':[4,4,5],'C列':[7,7,9]},index=['x','y','z'])
z3=pd.Dataframe({'n列':[1,2,3],'m列':[4,4,5],'p列':[7,7,9]})

pd.concat([z1,z2,z3],axis=1)

输出结果如下:

  

问:如何增加字段区分数据来源于哪张表?

#方法一 增加参数keys:

pd.concat([z1,z2,z3],keys=['表1','表2','表3'])

#方法二 传入字典:

dict={'表1':z1,'表2':z2,'表3':z3}
pd.concat(dict)

输出结果如下:

 其他知识点(没有特别理解的):

忽视index拼接 ingnore_index=True;

dateframe里增加行append,以dataframe增加series的方式:df.append(s1)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5573700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存