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. es笔记四之中文分词插件安装与使用

    本文首发于公众号:Hunter后端 原文链接:es笔记四之中文分词插件安装与使用 前面我们介绍的操作及演示都是基于英语单词的分词,但我们大部分使用的肯定都是中文,所以如果需要使用分词的操作肯定也是需要 ...

  2. weexplus真机调试

    一.连接真机 C:\Users\Lenovo>adb devices List of devices attached C9K7N15722004375 device 确定连接无误,否则执行we ...

  3. ✗ CocoaPods not installed.

    mac 配置 flutter 会提示许多 关于xcode的 如图 显示 ✗ CocoaPods installed but not initialized. 其实最开始提示的是 ✗ CocoaPods ...

  4. ODOO13之六:Odoo 13开发之模型 – 结构化应用数据

    在本系列文章第三篇Odoo 13 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...

  5. 在树莓派上使用numpy实现简单的神经网络推理,pytorch在服务器或PC上训练好模型保存成numpy格式的数据,推理在树莓派上加载模型

    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是mlp识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: 1 import torch 2 ...

  6. Java工具类Result<T>

    枚举类:ResultCodeEnum /** * 统一返回结果状态信息类 * */ @Getter public enum ResultCodeEnum { SUCCESS(200,"成功& ...

  7. Python Excel 操作 | xlrd+xlwt 模块笔记

    Python 的pandas模块使用xlrd作为读取 excel 文件的默认引擎.但是,xlrd在其最新版本(从 2.0.1 版本开始)中删除了对 xls 文件以外的任何文件的支持. xlsx fil ...

  8. VLAN——提高网络性能、安全性和灵活性的利器

    前言 VLAN是Virtual Local Area Network的缩写,它是一种通过网络交换机虚拟划分局域网的技术.VLAN可以将一个物理局域网划分成多个逻辑上的虚拟局域网,各个虚拟局域网之间相互 ...

  9. 区块链的Token机制如何理解?

    区块链的Token机制如何理解? 为了更好的理解区块链和Token的关系,今天专门基于互联网中的内容,做了下筛选过滤,从而可以让大家更好的理解,对于Token,如果是从事过开发的同学来说,比如容易理解 ...

  10. CKS 考试题整理 (14)-启用API Server认证

    Context 由 kubeadm 创建的cluster 的kubernetes API 服务器,出于测试目的, 临时配置允许未经身份验证和未经授权的访问,授予匿名用户 cluster-admin 的 ...