Pandas知识点-连接操作concat

Pandas知识点-连接操作concat

Pandas提供了多种将Series、DataFrame对象合并的功能,有concat(), merge(), append(), join()等。这些方法都可以将多个Series或DataFrame组合到一起,返回一个新的Series或DataFrame。每个方法在用法上各有特点,可以适用于不同的场景,本系列会逐一进行介绍。

concat是英文单词concatenate(连接)的缩写,concat()方法用于将Series或DataFrame连接到一起,达到组合的功能,本文介绍concat()方法的具体用法。

一、按行连接和按列连接

将DataFrame连接时,可以按行连接(纵向)也可以按列连接(横向)。

1. 按行连接

先创建两个DataFrame,然后连接。

concat(): 将多个Series或DataFrame连接到一起,默认为按行连接(axis参数默认为0),结果的行数为被连接数据的行数之和。

concat()的第一个参数通常传入一个由Series或DataFrame组成的列表,表示将列表中的数据连接到一起,连接的顺序与列表中的顺序相同。也可以传入一个字典,后面会介绍。

结果的行索引是多个数据的行索引拼接的结果,如果有相等的行索引会重复多行。

2. 按列连接

axis: axis参数默认为0('index'),如果将axis参数设置为1('columns'),则表示按列连接,结果的列数为被连接数据的列数之和。

结果的列索引是多个数据的列索引拼接的结果,如果有相等的列索引会重复多列。

二、连接基本原理解析

上面两个例子的连接原理如下。

1. 按行连接

2. 按列连接

在这两个例子中,按行连接时,两个DataFrame的列索引相同,按列连接时,两个DataFrame的行索引相同,所以结果看起来很直观。

3. 被连接数据的索引不同

连接原理如下。

这个例子中,两个DataFrame的行索引和列索引都不相等,将它们按行连接时,先将两个DataFrame的行拼接起来,然后在每行中没有数据的列填充空值。按列连接同理。

根据上面的三个例子(例1~例3),可以总结连接的原理为(按行连接,按列同理):

第一步,将数据按行拼接起来,如果有行索引相等的行,行索引会重复多行。

第二步,检索数据中的列索引,如果列索引相等,则结果兼容显示在同一列(例1),如果列索引不相等,则分别显示,无数据的位置填充空值(例3)。

三、连接时取交集

join: join参数默认为outer,前面的三个例子中都是默认取并集,如果将join参数设置为inner,则连接时取交集。

按行连接时,列取被连接数据的交集,只保留被连接数据中都有的列,原理如下。按列连接同理。

四、按列连接时修改行索引

按列连接时,可以使用reindex()方法修改结果的行索引(按行连接时不支持)。

如果取的是并集,修改行索引的过程为:先按取并集的方式连接,然后去掉结果中比修改的索引多出的行。

如果取的是交集,修改行索引的过程为:先按取交集的方式连接,然后在结果中增加比修改的索引少的行,增加回的行中填充空值。

五、重设结果的索引

ignore_index: ignore_index参数默认为False,结果的索引是被连接数据的索引(行索引和列索引)。将ignore_index修改为True,可以重设结果的行索引或列索引。

按行连接时,设置ignore_index为True,结果的行索引被重设为0开始的整数索引。按列连接时,则列索引被重设。

六、添加外层行索引

keys: keys参数默认为空,可以用keys参数给结果添加外层的行索引,使行索引变成多重行索引。也可以添加多层,如果添加多层行索引则用元组的方式传入。

前面提到concat()的第一个参数可以用字典的方式传入,其效果与使用keys参数相同。

给结果添加外层的行索引后,可以用添加的外层行索引将被连接数据取出。

七、多重行索引添加值和命名

levels: levels参数默认为空。使用keys给结果添加外层行索引后,可以使用levels参数给外层索引添加更多的值,传入一个嵌套的列表数据。对不是多重行索引的数据,levels参数不支持,会报错。

当然,添加进去的值在结果中不会显示,因为没有对应的数据,这个功能基本上也不会使用。

names: names参数默认为空,多重行索引的命名为None。使用names参数可以给多重行索引命名,传入一个列表,列表的长度可以小于多重行索引的层数,多出的层索引名默认为None,列表的长度不可以大于多重行索引的层数,会报错。names参数对普通索引无效。

以上就是Pandas连接操作concat()方法的介绍,本文都是以DataFrame为例,Series连接以及Series与DataFrame混合连接的原理都相同。

如果需要本文代码,可以扫码关注公众号“Python碎片”,然后在后台回复“pandas12”关键字获取完整代码。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小斌哥ge

非常感谢,祝你一切顺利。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值