pd.DataFrame中的几种索引变换的实现


Posted in Python onJune 16, 2022

导读:pandas中最常用的数据结构是DataFrame,而DataFrame相较于嵌套list或者二维numpy数组更好用的原因之一在于其提供了行索引和列名。本文主要介绍行索引的几种变换方式,包括rename与reindex、index.map、set_index与reset_index、stack与unstack等。

pd.DataFrame中的几种索引变换的实现

惯例开局一张图

01 索引简介与样例数据

Series和DataFrame是pandas中的主要数据结构类型(老版本中曾有三维数据结构Panel,是DataFrame的容器,后被取消),而二者相较于传统的数组或list而言,最大的便利之处在于其提供了索引,DataFrame中还有列标签名,这些都使得在操作一行或一列数据中非常方便,包括在数据访问、数据处理转换等。

这里,为了便于后文举例解释,给出基本的DataFrame样例数据如下:

pd.DataFrame中的几种索引变换的实现

后文将以此作为操作对象,针对索引的几种常用变换进行介绍。

注:这里的索引应广义的理解为既包扩行索引,也包括列标签。

02 reindex和rename

学习pandas之初,reindex和rename容易使人混淆的一组接口,就其具体功能来看:

  • reindex执行的是索引重组操作,接收一组标签序列作为新索引,既适用于行索引也适用于列标签名,重组之后索引数量可能发生变化,索引名为传入标签序列
  • rename执行的是索引重命名操作,接收一个字典映射或一个变换函数,也均适用于行列索引,重命名之后索引数量不发生改变,索引名可能发生变化

另外二者执行功能和接收参数的套路也是很为相近的,均支持两种变换方式:

  • 一种是变换内容+axis指定作用轴(可选0/1或index/columns);
  • 另一种是直接用index/columns关键字指定作用轴

具体而言,reindex执行索引重组操作,以新接收的一组标签序列作为索引,当原DataFrame中存在该索引时则提取相应行或列,否则赋值为空或填充指定值。对于前面介绍的示例数据df,以重组行索引为例,两种可选方式为:

pd.DataFrame中的几种索引变换的实现

注意到原df中行索引为[1, 3, 5],而新重组的目标索引为[1, 2, 3],其中[1, 3]为已有索引直接提取,[2, 4]在原df中不存在,所以填充空值;同时,原df中索引[5]由于不在指定索引中,所以遭舍弃。进一步地,由于重组后可能存在空值,reindex提供了填充空值的可选参数fill_value和method,二者用法与fillna方法一致,前者用于指定固定值填充,后者用于指定填充策略,例如:

pd.DataFrame中的几种索引变换的实现

rename用法套路与reindex很为相近,但执行功能完全不同,主要用于执行索引重命名操作,接收一个字典或一个重命名规则的函数类型,示例如下:

pd.DataFrame中的几种索引变换的实现

03 index.map

针对DataFrame中的数据,pandas中提供了一对功能有些相近的接口:map和apply,以及applymap,其中map仅可用于DataFrame中的一列(也即即Series),可接收字典或函数完成单列数据的变换;apply既可用于一列(即Series)也可用于多列(即DataFrame),但仅可接收函数作为参数,当作用于Series时对每个元素进行变换,作用于DataFrame时对其中的每一行或每一列进行变换;而applymap则仅可作用于DataFrame,且作用对象是对DataFrame中的每个元素进行变换。也就是说,三者的最大不同在于作用范围以及变换方式的不同。

实际上,apply和map还有一个细微区别在于:同样是可作用于单列对象,apply适用于索引这种特殊的单列,而map则不适用。所以,对索引执行变换的另一种可选方式是用map函数,其具体操作方式与DataFrame常规map操作一致,接收一个函数作为参数即可:

pd.DataFrame中的几种索引变换的实现

04 set_index与reset_index

set_index和reset_index是一对互逆的操作,其中前者用于置位索引——将DataFrame中某一列设置为索引,同时丢弃原索引;而reset_index用于复位索引——将索引加入到数据中作为一列或直接丢弃,可选drop参数。二者是非常常用的一组操作,例如在执行groupby操作后一般会得到一个series类型,此时增加一个reset_index操作即可实现series转换为DataFrame。当然转换的操作不止这一种。

pd.DataFrame中的几种索引变换的实现

05 stack与unstack

这也是一对互逆的操作,其中stack原义表示堆叠,实现将所有列标签堆叠到行索引中;unstack即解堆,用于将复合行索引中的一个维度索引平铺到列标签中。实际上,二者的操作即是SQL中经典的行转列与列转行,也即在长表与宽表之间转换。

pd.DataFrame中的几种索引变换的实现

当然,实现unstack操作的方式还有pivot,此处不再展开。

到此这篇关于pd.DataFrame中的几种索引变换的实现的文章就介绍到这了,更多相关pd.DataFrame 索引变换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Python 相关文章推荐
python文件的md5加密方法
Apr 06 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python实现查看系统启动项功能示例
May 10 Python
python绘制多个曲线的折线图
Mar 23 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python print不能立即打印的解决方式
Feb 19 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
python实现按日期归档文件
Jan 30 Python
Python列表的索引与切片
Apr 07 Python
Python实战实现爬取天气数据并完成可视化分析详解
pandas时间序列之pd.to_datetime()的实现
Jun 16 #Python
pandas中pd.groupby()的用法详解
Jun 16 #Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 #Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 #Python
python内置模块之上下文管理contextlib
Jun 14 #Python
Python时间操作之pytz模块使用详解
You might like
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
编写Js代码要注意的几条规则
2010/09/10 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
js实现头像上传并且可预览提交
2020/12/25 Javascript
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
外贸业务员求职信范文
2013/12/12 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android