Python CategoricalDtype自定义排序实现原理解析


Posted in Python onSeptember 11, 2020

CategoricalDtype自定义排序

当我们的透视表生成完毕后,有很多情况下需要我们对某列或某行值进行排序。排序有很多种方法。例如sort_index及sort_values函数也可以对数据进行排序,这里就不多说了。

对于数值和字母的排序很容易,但是对于中文的排序就有点麻烦了。默认情况下是按照utf-8的编码来进行排序的但是即使如此也很难满足我们对汉字排序的要求。所以通过CategoricalDtye可以把数据类型转成Category类型

然后通过指定参数列表的顺序来自定义那个元素先那个元素后,完全取决于你把那个元素放在List的前面,这样就大大方便了我们对中文排序的操作。

代码如下:

1. 自动生成DataFrame数据

#%%

import pandas as pd
from datetime import datetime

city =["上海","北京","深圳","杭州","苏州","青岛","大连","齐齐哈尔","大理","丽江",
     "天津","济南","南京","广州","无锡","连云港","张家界"]

#创建自动从list中选取valuse值的get_list函数
#replace=True代表允许选出的元素重复
def get_list(items,size=20):
  return pd.Series(items).sample(n=size,replace=True).to_list()

#通过get_list自动生成数据,最终生成一个DataFrame
df = pd.DataFrame({
   "城市":get_list(city),
   "仓位":get_list(["经济舱","商务舱","头等舱"]),
   "航线":get_list(["单程","往返"]),
   "日期": get_list([datetime(2020,8,1),datetime(2020,8,2),
           datetime(2020,8,3),datetime(2020,8,4)]),
   "时间": get_list(["09:00 - 12:00",
            "13:00 - 15:30",
            "06:30 - 15:00",
            "18:00 - 21:00",
            "20:00 - 23:20",
            "10:00 - 15:00"]),
   "航空公司": get_list(["东方航空","南方航空","深圳航空","山东航空","中国航空"]),
   "出票数量":get_list([10,15,20,25,30,35,40,45,50,55,60]),
  })
#%%
df

结果如下:

Python CategoricalDtype自定义排序实现原理解析

2. 查看数据类型

#%%

df.dtypes

Python CategoricalDtype自定义排序实现原理解析

3. 自定义数据类型(Category)按照指定顺序排序,并通过透视表展示数据

#%%
#自定义type,以及自定义排序的顺序
my_type = pd.CategoricalDtype(
  categories=["头等舱","商务舱","经济舱"],
  ordered=True
)
df["仓位"] = df["仓位"].astype(my_type) #将指定列转成自定义的type
df.dtypes
#%%
#通过透视表统计数据
tb = pd.pivot_table(
  df,
  index=["城市","仓位","航线","日期","时间"],
  values="出票数量",
  aggfunc=sum
)
tb

先查看数据类型:可以看出仓位的数据类型已经从Object变成了category类型了。

Python CategoricalDtype自定义排序实现原理解析

结果为:

Python CategoricalDtype自定义排序实现原理解析

分析上述数据可以看出,我们把仓位按照["头等舱","商务舱","经济舱"]的顺序进行了排序,排序结果也是按照这个顺序排列的,成功的满足了我们对中文列自定义排序的需求。

通过Pivot_table函数更加清晰的对原有数据进行了展示。也可以按照自己的需求展示其中的一部分数据。这样对数据的清洗及展示变得更加的灵活。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
更改Python命令行交互提示符的方法
Jan 14 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
Python实现端口检测的方法
Jul 24 Python
python判断完全平方数的方法
Nov 13 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
python3+selenium实现126邮箱登陆并发送邮件功能
Jan 23 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
一些关于python 装饰器的个人理解
Aug 31 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python 如何利用argparse解析命令行参数
Sep 11 #Python
Python Pivot table透视表使用方法解析
Sep 11 #Python
Python extract及contains方法代码实例
Sep 11 #Python
python 利用zmail库发送邮件
Sep 11 #Python
浅析Python 责任链设计模式
Sep 11 #Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 #Python
python实现邮件循环自动发件功能
Sep 11 #Python
You might like
一个PHP+MSSQL分页的例子
2006/10/09 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
Angular的$http与$location
2016/12/26 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
python使用生成器实现可迭代对象
2018/03/20 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python实现宿舍管理系统
2019/11/22 Python
tensorflow 查看梯度方式
2020/02/04 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
大学生学习党课思想汇报
2014/01/03 职场文书
专项法律服务方案
2014/06/11 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
使用python绘制横竖条形图
2022/04/21 Python