Pandas知识点-连接操作concat

共 2142字,需浏览 5分钟

 ·

2021-06-05 11:46

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”关键字获取完整代码。


浏览 88
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报