series合并成dataframe_DataFrame合并

e2af44c95cd3f20e9bd8a978a939d33b.png

DataFrame合并方式有3种:

1、join (着重关注的是行的合并)

  • left 左连接df3.join(df4,how='left')
    简单合并(默认是left左连接,以左侧df3为基础)
  • right右连接df3.join(df4,how='right')
    右连接,以右侧的数组为基础
  • outer外连接df3.join(df4,how='outer')
    左右两侧都包含

所有合并连接,遇到没有的值都默认为NaN

  • 合并多个DataFrame对象df3.join([df4,df5])
    df4,df5两个数组都是以df3数组为基础合并的

2、merge(着重关注的是列的合并)

  • how=’inner’
    默认下是根据左右对象中出现同名的列作为连接的键pd.merge(df1,df2)
  • 指定列名合并pd.merge(df1,df2,on='名字',suffixes=['_1','_2'])
    根据名字这一列合并,suffixes 设置列名的后缀名(相同列不同内容时用)
  • 左连接leftpd.merge(df1,df2,how='left')
    以左侧为准
  • 右连接rightpd.merge(df1,df2,how='right')
    以右侧为准
  • 外连接outerpd.merge(df1,df2,how='outer')
    df1和df2数组全部包含
  • 根据多个键连接(列名):pd.merge(df1,df2,on=['职称','名字'])
    根据 ‘职称’,‘名字’ 进行合并

df1、df2、df3、df4、df5如下:

df1=pd.DataFrame({'名字':list('ABCDE'),'性别':['男','女','男','男','女'],
'职称':['副教授','讲师','助教','教授','助教']},index=range(1001,1006))
df2=pd.DataFrame({'名字':list('ABDAX'),
                  '课程':['C++','计算机导论','汇编','数据结构','马克思原理'],
                  '职称':['副教授','讲师','教授','副教授','讲师']},
                 index=[1001,1002,1004,1001,3001])
df3=pd.DataFrame({'Red':[1,3,5],'Green':[5,0,3]},index=list('abc'))
df4=pd.DataFrame({'Blue':[1,9,8],'Yellow':[6,6,7]},index=list('cde'))
df5=pd.DataFrame({'Brown':[3,4,5],'White':[1,1,2]},index=list('aed'))

3、Concat

objs:合并对象
axis:合并方式,0-列,1-行
ignore_index:是否忽略索引

  • 按行合并pd.concat([df1,df2],axis=1)
    按行合并会以拥有最多行的为基准,最后合并后呈现的行数就是为基准的行数。
df1=pd.DataFrame(np.arange(6).reshape(3,2),columns=['four','five'])
df2=pd.DataFrame(np.arange(6).reshape(2,3),columns=['one','two','three'])
result=pd.concat([df1,df2],axis=1)
print(result)
  • 按列合并

pd.concat([df1,df2],axis=0,ignore_index=True)

按列合并不会合并行,所以即使行索引一致也不会合并。

result=pd.concat([df1,df2],axis=0,ignore_index=True)
print(result)
  • 用内连接求交集(连接方式,共有’inner’,’left’,right’,’outer’)pd.concat([df1,df2],axis=1,join='inner')
    合并相同的索引行数据
  • 指定部分索引进行连接pd.concat([s1,s2],axis=1,join_axes=[list('abc')])
    指定索引 abc 进行合并
s1=pd.Series([1,2],index=list('ab'))
s2=pd.Series([3,4,5],index=list('bde'))
print(s1)
print(s2)
# 指定部分索引进行连接
print(pd.concat([s1,s2],axis=1,join_axes=[list('abc')]))
  • 创建层次化索引pd.concat([s1,s2],keys=['A','B'])
    就是给s1和s2合并之后分别起了名字叫A和B,相当于数组的索引(key)
  • 当纵向连接时keys为列名pd.concat([s1,s2],keys=['A','D'],axis=1)
  • 用字典的方式连接同样可以创建层次化列索引:pd.concat({'A':s1,'B':s2,axis=1)

7ed1992f8945d3fb6c28d2f1e173d67f.gif
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值