pandas中合并数据的5中方法

本文详细介绍了Pandas库中用于数据合并的五个关键函数:join(基于索引的横向拼接)、merge(基于列的连接,类似SQL的JOIN)、concat(支持横向和纵向拼接)、append(纵向追加)以及combine(使用函数按列组合)。通过示例展示了它们在不同情况下的应用。
摘要由CSDN通过智能技术生成

版权声明:本文为博主转载文章
原文链接:https://blog.csdn.net/jclian91/article/details/84289537

pandas中合并数据的5中方法

盘点一下pandas中合并数据的5个函数。但是对于每个函数,具体用法大家可以参考pandas官方文档。

  • join主要用于基于索引的横向合并拼接;

  • merge主要用于基于指定列的横向合并拼接;

  • concat可用于横向和纵向合并拼接;

  • append主要用于纵向追加;

  • combine可以通过使用函数,把两个DataFrame按列进行组合。

join

join是基于索引的横向拼接,如果索引一致,直接横向拼接。如果索引不一致,则会用Nan值填充。

索引一致
 
  1. x = pd.DataFrame({'A': ['A0', 'A1', 'A2'],

  2.           'B': ['B0', 'B1', 'B2']},

  3.           index=[0, 1, 2])

  4. y = pd.DataFrame({'C': ['C0', 'C2', 'C3'],

  5.             'D': ['D0', 'D2', 'D3']},

  6.             index=[0, 1, 2])

  7. x.join(y)

结果如下:

0c902d3f26fba45633c28df8a864df14.png

索引不一致
 
  1. x = pd.DataFrame({'A': ['A0', 'A1', 'A2'],

  2.               'B': ['B0', 'B1', 'B2']},

  3.               index=[0, 1, 2])

  4. y = pd.DataFrame({'C': ['C0', 'C2', 'C3'],

  5.             'D': ['D0', 'D2', 'D3']},

  6.              index=[1, 2, 3])

  7. x.join(y)

结果如下:

819379ef9c470a4d4dbabc222c931070.png

merge

merge是基于指定列的横向拼接,该函数类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

  • 可以指定不同的how参数,表示连接方式,有inner内连、left左连、right右连、outer全连,默认为inner;

 
  1. x = pd.DataFrame({'姓名': ['张三', '李四', '王五'],

  2.               '班级': ['一班', '二班', '三班']})

  3. y = pd.DataFrame({'专业': ['统计学', '计算机', '绘画'],

  4.              '班级': ['一班', '三班', '四班']})

  5. pd.merge(x,y,how="left")

结果如下:

fda897e742b5281974642081e5b0d261.png

pd.merge()方法索引连接,以及重复列名命名。

pd.merge()方法可以通过设置left_index或者right_index的值为True来使用索引连接,例如这里df1使用data1当连接关键字,而df2使用索引当连接关键字。

从上面可以发现两个DataFrame中都有key列,merge合并之后,pandas会自动在后面加上(_x,_y)来区分,我们也可以通过设置suffixes来设置名字。

concat

concat函数既可以用于横向拼接,也可以用于纵向拼接。

纵向拼接
 
  1. x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns=         ['name','gender','age'])

  2. y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns=  ['name','gender','age'])

  3. z = pd.concat([x,y],axis=0)

  4. z

结果如下:

678ec617a1b9e1b889f5e37fdf203866.png

横向拼接
 
  1. x = pd.DataFrame({'姓名': ['张三', '李四', '王五'],

  2.                      '班级': ['一班', '二班', '三班']})

  3. y = pd.DataFrame({'专业': ['统计学', '计算机', '绘画'],

  4.                       '班级': ['一班', '三班', '四班']})

  5. z = pd.concat([x,y],axis=1)

  6. z

结果如下:

88b94f39ef76534c117907b461cd83de.png

append

append主要用于纵向追加数据。

 
  1. x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns=['name','gender','age'])

  2. y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns=['name','gender','age'])

  3. x.append(y)

结果如下:

2fafc8dd21a76006c9f709eb1a1de170.png

combine

conbine可以通过使用函数,把两个DataFrame按列进行组合。

 
  1. x = pd.DataFrame({"A":[3,4],"B":[1,4]})

  2. y = pd.DataFrame({"A":[1,2],"B":[5,6]})

  3. x.combine(y,lambda a,b:np.where(a>b,a,b))

结果如下:

758a6a6e6cfcaafc9125ae07048b8515.png

注:上述函数,用于返回对应位置上的最大值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值