以下用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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)