Pandas知识点-排序操作

数据处理过程中,经常需要对数据进行排序,使数据按指定的顺序排列(升序或降序)。

在Pandas中,排序功能已经实现好了,我们只需要调用对应的方法即可。

本文使用的数据来源于网易财经,具体下载方法可以参考:https://blog.csdn.net/weixin_43790276/article/details/113923039。

本文的代码在Jupyter Notebook中编写,Jupyter Notebook的安装可以参考:https://blog.csdn.net/weixin_43790276/article/details/108927770。

一、数据读取

数据文件是600519.csv,将此文件放到代码同级目录下,从文件中读取出数据。

为了方便后面进行排序操作,只读取了数据中的前十行,并删除了一些列,设置“日期”和“收盘价”为索引。

读取的原始数据如上图,本文基于这些数据来进行排序操作。

二、DataFrame排序操作

1. 按索引进行排序

sort_index(): 对DataFrame按索引排序。

一般情况下DataFrame的行索引都是单列索引,即数值型索引或指定的某一列作为行索引。如果行索引为多重索引,在不指定参数level时,会按多重索引中的第一个行索引进行排序。

ascending: 排序默认是升序排序,ascending参数默认为True,将ascending参数设置成False则按降序排序。

axis: 排序默认是按行索引排序(对每一行数据排序),axis参数默认为0,将axis参数设置成1则按列索引排序(对每一列数据排序)。​不过,在实际应用中,对列排序的情况是极少的。

inplace: 在排序时,默认返回一个新的DataFrame,inplace参数默认为False,将inplace参数设置成True则对原DataFrame进行排序,直接修改了数据本身,无返回值。无返回值时不能链式调用,如调用head(),将inplace设置成True时要注意。

2. 按多重索引进行排序

level: 当DataFrame的行索引为多重索引时,通过level参数可以指定按多重索引中的一个或多个行索引进行排序,level参数默认为None,按多重索引中的第一个行索引排序。如指定level为“收盘价”时,不再是按“日期”排序,而是按“收盘价”排序。

给level传值时,可以传入行索引的key(索引名),如:“日期”、“收盘价”,也可以传入行索引的数值索引,如:0或1,0对应“日期”,1对应“收盘价”。

如果要按多重索引内的多个行索引排序,可以给level传入一个列表,这样会先按列表中的第一个行索引排序,当第一个行索引有相等的值时,再按第二个行索引进行排序,以此类推。对应的ascending可以传入一个值,表示多个行索引都升序或都降序,如果要使多个行索引有升序有降序,可以给ascending传入一个列表,列表长度与level的列表长度必须相等。

ignore_index: 如果DataFrame的行索引为多重索引,排序结果显示的索引默认是多重索引,ignore_index参数默认为False,将ignore_index参数设置成True则结果中会隐藏多重索引,显示成数值型索引(排序完成后从0开始编号)。

sort_remaining: 按多重索引排序时,按level指定的行索引排序后,默认会继续对剩余的行索引进行排序,sort_remaining参数默认为True。在上面的例子中,level指定按“收盘价”进行降序排序,如果sort_remaining为True,按“收盘价”排序后,如果“收盘价”中有相等的值,会继续按剩余的(level没有指定的)行索引“日期”进行降序排序。如果sort_remaining为False,则按“收盘价”排序后,排序就结束了,即使“收盘价”中有相等的值也不会继续排序。

当多重索引中不止两个行索引时,如果level指定的行索引排序升降不一致(有升序有降序),即使sort_remaining为True,剩余的行索引也不会继续排序。例如多重索引中有三个行索引,level指定了按前两个索引排序,一个是升序一个是降序,此时即使sort_remaining为True,也不会继续按第三个行索引排序。不过,在实际应用中,这种情况极少。

继续上面的情况,按多重索引中的第一个行索引排序后不继续排序,如果第一个行索引中有相等的值,结果的顺序是什么样的呢?是不是保持原始数据的先后顺序?

kind: 在sort_index()中默认采用的排序算法是快速排序,kind参数默认为quicksort(快速排序)。快速排序是一种不稳定的排序算法,不能保证结果中值相等的数据保持先后顺序。kind参数支持三种排序算法,另两种是mergesort(归并排序)和heapsort(堆排序),三种排序算法中只有归并排序是稳定的。但kind参数只支持单列的排序,不能用于按多重索引排序的情况。如果对每个行索引的排序都有要求,最好是通过level和ascending参数依次指定好。

3. 按指定列进行排序

在按列排序前,请特别注意:按行索引排序和按列排序都是对行进行排序,按列索引排序和按行排序都是对列进行排序。避免被绕晕了。

sort_values(): 对DataFrame按列排序。

by: sort_values()的第一个参数by是必传参数,传入排序指定的基准列,传参可以用位置参数的方式,也可以用关键字参数的方式。如果对行排序,by参数必须传入列索引中的值,如果对列排序,by参数必须传入行索引中的值。

因为DataFrame中存储的每一列数据类型通常不一样,有些数据类型之间不支持排序,所以不一定能对列排序。

na_position: 在按指定列进行排序时,如果此列数据中有空值(NaN),空值默认排在最后面,na_position参数默认为 last ,将na_position参数设置成 first 则空值排在最前面。na_position参数只支持按单列排序时使用,在按多重索引或按多列排序时无效。

sort_values()中,axis参数、ascending参数、inplace参数、kind参数、ignore_index参数的功能与sort_index()中一样,不再赘述。

4. 按多个列进行排序

给by参数传入多个列索引值时(用列表的方式),即可以对多个列进行排序。当第一列中有相等的数据时,依次按后面的列进行排序。ascending参数的用法与按多重索引排序一样。

三、Series排序操作

1. 按行索引进行排序

sort_index(): 对Series按行索引排序。

Series是一维数据,只有一列,不存在对列索引排序的情况,所以axis参数的值只能为0,不能设置成1,否则会报错。

多重索引的排序与DataFrame一样,不过,多重索引一般用于多维数据中,Series数据的行索引一般不会是多重索引。

对Series排序时,level参数、ascending参数、inplace参数、kind参数、na_position参数、sort_remaining参数、ignore_index参数的功能与DataFrame排序时一样。

2. 按列进行排序

sort_values(): 对Series按列排序。

Series只有一列数据,所以按列排序时,不需要指定列,没有by参数,也不可以设置axis参数为1,否则会报错。当然也不存在基于多列排序的情况。

ascending参数、inplace参数、kind参数、na_position参数、ignore_index参数的功能与DataFrame排序时一样。

四、排序方法总结

不管是对DataFrame排序还是对Series排序,方法名都一样,sort_index()和sort_values()。

对DataFrame排序可以对行排序(按行索引或按列),也可以对列排序(按列索引或按行),不过,对列排序会受数据类型的限制。对Series排序只能对行排序(按行索引或按列)。

axis参数用于设置对行排序还是对列排序,Series排序时只能对行排序。level参数用于设置多重索引中排序的行索引,行索引不是多重索引时没必要使用。ascending参数用于设置升序或降序排序。inplace参数用于设置是否对原数据修改,对原数据修改时没有返回值,不能链式调用。kind参数用于设置使用的排序算法,在按多重索引排序和按多个列排序时无效。na_position参数用于设置空值排在最后面或最前面,在按多重索引排序和按多个列排序时无效。如果行索引是多重索引,ignore_index参数可以设置返回结果是否忽略多重索引,行索引不是多重索引时无效。按多重索引排序时,sort_remaining参数用于设置是否继续按level没有指定的行索引排序,如果level指定的行索引排序升降不统一则无效。

以上就是Pandas中的排序操作介绍,如果需要数据和代码,可以扫码关注公众号“Python碎片”,然后在后台回复“pandas04”关键字获取本文代码和数据。

Pandas知识点-排序操作相关推荐

  1. Pandas知识点-添加操作append

    Pandas知识点-添加操作append 在Pandas中,append()方法用于将一个或多个DataFrame或Series添加到DataFrame中.append()方法也可以用于合并操作,本文 ...

  2. Pandas知识点-合并操作combine

    Pandas知识点-合并操作combine combine是联合的意思,在Pandas中,combine()方法也是一种实现合并的方法,本文介绍combine()方法的用法. 一.combine_fi ...

  3. Pandas知识点-合并操作join

    Pandas知识点-合并操作join 在Pandas中,join()方法也可以用于实现合并操作,本文介绍join()方法的具体用法. 一.基础合并操作 join(other): 将一个或多个DataF ...

  4. Pandas知识点-合并操作merge

    Pandas知识点-合并操作merge merge()方法是Pandas中的合并操作,在数据处理过程中很常用,本文介绍merge()方法的具体用法. 一.基础合并操作 merge(left, righ ...

  5. Pandas知识点-连接操作concat

    Pandas知识点-连接操作concat Pandas提供了多种将Series.DataFrame对象合并的功能,有concat(), merge(), append(), join()等.这些方法都 ...

  6. Pandas知识点-比较操作

    Pandas知识点-比较操作 比较操作是很简单的基础知识,不过Pandas中的比较操作有一些特殊的点,本文进行介绍. 一.比较运算符和比较方法 比较运算符用于判断是否相等和比较大小,Python中的比 ...

  7. Pandas知识点-索引和切片操作

    Pandas知识点-索引和切片操作 索引和切片操作是最基本最常用的数据处理操作,Pandas中的索引和切片操作基于Python的语言特性,支持类似于numpy中的操作,也可以使用行标签.列标签以及行标 ...

  8. python pandas excel 排序_Python pandas对excel的操作实现示例

    最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...

  9. 【Python】Pandas数据排序实现

    公众号:尤而小屋 作者:Peter 编辑:Peter 在以前的一篇文章   图解Pandas的排序机制sort_values   详细介绍了如何使用pandas的内置函数sort_values来实现数 ...

最新文章

  1. 好记性不如烂笔杆-android学习笔记二 Acitvity lifecycle 生命周期
  2. 患者痛不欲生,但AI说:别给她开止疼药
  3. 领导应该怎么当?盯目标、抓计划、管时间、做农夫、当仆人……
  4. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
  5. linux filesystem_Linux 查看磁盘占比?
  6. Python操作dict时避免出现KeyError的几种方法
  7. Lucky Substrings
  8. java web请求字符串处理_java web工作常用技能篇(三)-封装复杂请求对象2
  9. pytorch将label转为one hot形式
  10. ro手游服务器维护公告,4月10日5点-10点停服维护公告
  11. leetcode刷题:求旋转有序数组的最小值
  12. 绝地求生测试服画面优化软件,绝地求生大逃杀优化方法 画面优化工具使用教程_3DM单机...
  13. 译:Self-Modifying cod 和cacheflush
  14. linux Shell学习笔记第二天
  15. composition API
  16. mac使用jeb记录
  17. 人脸识别活体检测测试案例
  18. (超全)全面手动清理c盘的的步骤
  19. 群辉docker安装树莓派镜像_群晖 Docker 安装 AriaNg+File Browser
  20. win10如何安装.NET3.5

热门文章

  1. 阿里云Freeswtich部署
  2. The setting logImpl is not known
  3. Hadoop集群(第10期副刊)_常用MySQL数据库命令
  4. POJ1273 Drainage Ditches(最大流基础题)
  5. 整合mybatis3.2.2跟spring3.0.1
  6. xcode 4.2下怎么添加framework?
  7. 9th, Jan 2012 养成好的生活习惯真的很不容易
  8. 文昌帝君 -- 《文昌帝君阴骘文》
  9. 给 npm script 传递参数和添加注释
  10. Oracle数据库的备份与恢复技术