前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas知识点-连接操作concat

Pandas知识点-连接操作concat

作者头像
Python碎片公众号
发布2021-06-24 15:47:50
1.9K0
发布2021-06-24 15:47:50
举报

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混合连接的原理都相同。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 按行连接
  • 2. 按列连接
  • 1. 按行连接
  • 2. 按列连接
  • 3. 被连接数据的索引不同
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档