【pandas小技巧】--category类型补充

category类型在pandas基础系列中有一篇介绍数据类型的文章中已经介绍过。category类型并不是python中的类型,是pandas特有的类型。


(资料图片)

category类型的优势那篇文章已经介绍过,当时只是介绍了如何将某个列的数据转换成category类型,以及转换之后给程序性能上带来的好处。

本篇将补充介绍深入使用category类型时,经常会遇到的两个问题。一个是category类型中各个值的顺序调整;另一个是按照数值的范围转换为category类型。

1. catagory类型顺序

当我们把一个列的数据转换为category类型时,category类型中各个值的默认顺序是按照字母顺序排列的。比如:

import pandas as pddf = pd.DataFrame({    "学号": [1, 2, 3, 4, 5, 6],    "年级": ["初二", "初一", "初二",           "初一", "初三", "初三"],})df["年级"] = df["年级"].astype("category")df.sort_values("年级")

我们发现,默认顺序 **初三 **排在 **初二 **之前,与实际情况不符。

所以,需要调整category类型的顺序。

import pandas as pddf = pd.DataFrame({    "学号": [1, 2, 3, 4, 5, 6],    "年级": ["初二", "初一", "初二",           "初一", "初三", "初三"],})g_type = pd.CategoricalDtype(    categories=["初一", "初二", "初三"],    ordered=True)df["年级"] = df["年级"].astype(g_type)df.sort_values("年级")

通过CategoricalDtype函数定义category类型,可以在定义时设置各个值的顺序。

2. 按范围转换catagory类型

有时候我们需要将一批的连续的数据按照不同的范围转换为category类型。

比如下面随机生成的100个介于180岁的年龄数据:

df = pd.DataFrame(    np.random.randint(1, 80, (100, 1)))df.columns = ["年龄"]df

希望按照不同的年龄范围划分年龄段,而不是每个年龄都转换为category类型。

这时可以用cut函数来实现:

df["年龄段"] = pd.cut(df["年龄"],                 bins=[0, 18, 25, 60, 80],                labels=["儿童", "青年",                         "成人", "老人"]                )df

按照年龄段来划分不同的category

bins参数:设置每个category对应的范围labels参数:category的值,labels列表中值的顺序就是category的顺序

除了cut函数,还有个qcut函数,也可以按照数据范围来生成category类型。它们的区别主要在于:

cut函数:根据值的大小将数据分为binsbins的数目可以是等距的,也可以是自定义的。qcut函数:根据值的频率将数据分为bins,每个bin中含有的数据个数相同或尽可能接近。bins的数量由程序自动确定。

因此,cut函数适合等距离离散化,而qcut函数适合非等距离离散化。例如,我们有1000个数据点,想要把它们分为10组,cut函数通常会将数据平均分为长度相同的10个组,而qcut函数则会将这些数据分为包含大约100个数据点的10个组。

关键词:

为您推荐

【pandas小技巧】--category类型补充

`category`类型在**pandas基础**系列中有一篇介绍数据类型的文章中已经

来源:博客园2023-08-21

川西气田最大脱硫站项目施工冲刺保中交

进入8月以来,炼化工程十建公司承建的川西气田最大脱硫站项目进入施工

来源:中国石化新闻网2023-08-21

AI机器时代:整合关键技术 加快技术突破

深圳市机器时代科技有限公司(简称“AI机器时代”)创始人兼董事长杨威

来源:深圳商报2023-08-21

进口花岗岩石材图片(国产石材和进口石材有什么区别)

导读1、目前我国进口石材一般是国内尚未有的品种,花纹、颜色独特;进

来源:互联网2023-08-21

亿帆医药(002019.SZ)董事长兼总裁提议回购3000万-5000万元股份

格隆汇8月20日丨亿帆医药(002019 SZ)公布,公司于2023年8月18日收到公

来源:格隆汇2023-08-20

有功功率是什么意思(功率是什么意思)

功率是指物体在单位时间内所做的功的多少,即功率是描述做功快慢的物理

来源:互联网2023-08-20

高铁座椅怎么往后调二等座(高铁座椅怎么往后调)

诸多的对于高铁座椅怎么往后调二等座,高铁座椅怎么往后调这个问题都颇

来源:互联网2023-08-20

敏感皮肤如何选择护肤品?抗敏保湿护肤品排行榜十强

敏感皮肤在选择护理产品时,要从多个角度考虑。首先要关注成分表,尽量

来源:哔哩哔哩2023-08-20