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

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

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

1. catagory类型顺序

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

import pandas as pd

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


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

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

import pandas as pd

df = 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

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

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

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

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

【pandas小技巧】--category类型补充的更多相关文章

  1. pandas小技巧

    1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...

  2. sql server 之函数小技巧 && 整数类型为空是用空字符串替代实现

    1.判空函数 说明:使用指定的替换值替换 NULL. 语法:ISNULL ( check_expression , replacement_value ) 参数: check_expression:将 ...

  3. pandas 小技巧

    1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...

  4. 开发Android应用 提升性能的小技巧

    前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...

  5. 【js】中的小技巧

    本文主要介绍一些JS中用到的小技巧 1. 类型强制转换   1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为 ...

  6. Pandas一些小技巧

    Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...

  7. Python补充02 Python小技巧

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...

  8. (数据科学学习手札68)pandas中的categorical类型及应用

    一.简介 categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别.血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内 ...

  9. iOS:小技巧(不断更新)

    记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...

  10. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

随机推荐

  1. 利用APIFOX对ABAP函数进行调用

    1.安装APIFOX,当然也可以使用在线版,无需下载 官网地址:https://apifox.com/ 2.新建项目 3.为项目起一个名称,为相关开发测试人员授权 4.在根目录新增子目录 5.编辑开发 ...

  2. Kafka的系统架构和API开发

    系统架构 主题topic和分区partition topic Kafka中存储数据的逻辑分类:你可以理解为数据库中"表"的概念:比如,将app端日志.微信小程序端日志.业务库订单表 ...

  3. 之江实验室: 如何基于 JuiceFS 为超异构算力集群构建存储层 ?

    今天,高性能计算结合人工智能技术正在推动科研创新.例如通过破解水稻基因密码推动作物育种从"试验选优"向"计算选优"发展,在医药领域快速分析分子与蛋白之间的相互作 ...

  4. 【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案

    问题描述 创建App Service Container服务,选择从Docker Hub中获取appsmith/appsmith-ce 镜像(https://www.appsmith.com/ &am ...

  5. AR技术的应用与未来

    目录 随着科技的不断进步,增强现实(AR)技术也在不断发展壮大.AR技术是一种通过计算机技术和传感器技术将虚拟信息融合到现实世界中的技术,可以为用户带来一种全新的.交互性更强的体验.本文将探讨AR技术 ...

  6. pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)

    pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译) 目录 pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译) 环境搭建 安卓源码下载 一.准备下载环境 1.安装Py ...

  7. spingmvc配置AOP 之 非注解方式

    spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...

  8. influxdb 中得 fields 与 tag 区别总结

    本位为博主原创,转载请注明出处: 1.Field与Tag说明 在 InfluxDB 表结构中,field 和 tag 是用于存储数据的两种不同类型. Field(字段): Field 用于存储实际的数 ...

  9. Kotlin 常用语法糖记录

    原文地址: Kotlin 常用语法糖记录 - Stars-One的杂货小窝 当使用 Kotlin 编程时,有一些常用的函数可以帮助我们简化代码并提高开发效率. 稍微列举下常用的方法 runCatchi ...

  10. 聊一聊Java中的Steam流

    1 引言 在我们的日常编程任务中,对于集合的制造和处理是必不可少的.当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用 ...