【pandas小技巧】--category类型补充
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
个介于1
到80
岁的年龄数据:
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函数:根据值的大小将数据分为
bins
。bins
的数目可以是等距的,也可以是自定义的。 - qcut函数:根据值的频率将数据分为
bins
,每个bin
中含有的数据个数相同或尽可能接近。bins
的数量由程序自动确定。
因此,cut
函数适合等距离离散化,而qcut
函数适合非等距离离散化。
例如,我们有1000
个数据点,想要把它们分为10
组,cut
函数通常会将数据平均分为长度相同的10
个组,
而qcut
函数则会将这些数据分为包含大约100
个数据点的10
个组。
【pandas小技巧】--category类型补充的更多相关文章
- pandas小技巧
1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...
- sql server 之函数小技巧 && 整数类型为空是用空字符串替代实现
1.判空函数 说明:使用指定的替换值替换 NULL. 语法:ISNULL ( check_expression , replacement_value ) 参数: check_expression:将 ...
- pandas 小技巧
1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...
- 开发Android应用 提升性能的小技巧
前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...
- 【js】中的小技巧
本文主要介绍一些JS中用到的小技巧 1. 类型强制转换 1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为 ...
- Pandas一些小技巧
Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...
- Python补充02 Python小技巧
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...
- (数据科学学习手札68)pandas中的categorical类型及应用
一.简介 categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别.血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内 ...
- iOS:小技巧(不断更新)
记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
随机推荐
- 2022-06-11:注意本文件中,graph不是邻接矩阵的含义,而是一个二部图。 在长度为N的邻接矩阵matrix中,所有的点有N个,matrix[i][j]表示点i到点j的距离或者权重, 而在二部
2022-06-11:注意本文件中,graph不是邻接矩阵的含义,而是一个二部图. 在长度为N的邻接矩阵matrix中,所有的点有N个,matrix[i][j]表示点i到点j的距离或者权重, 而在二部 ...
- Selenium - 元素定位(2) - XPATH进阶
Selenium - 元素定位 XPATH 定位进阶 元素示例 属性定位 # xpath 通过id属性定位 driver.find_element_by_xpath("//*[@id='kw ...
- 痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v4.0.0)发布过去4个多月了,期间痞子衡也做过两个小版本更新,但不足以单独介绍.这一次痞子衡为大家带来了全新大版本v5. ...
- chrome 应用程序无法启动,因为应用程序的并行配置不正确
win10系统谷歌浏览器无法启动,系统报错,如下图: 解决方案: 步骤1:进入chrome的安装路径C:\Program Files (x86)\Google\Chrome\... ...(找到自己的 ...
- 图解VirtualBox安装CentOS 7
VirtualBox简介 VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分. VirtualBox提供用户在32 ...
- 一文吃透Java并发高频面试题
内容摘自我的学习网站:topjavaer.cn 分享50道Java并发高频面试题. 线程池 线程池:一个管理线程的池子. 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程 ...
- docker desktop 与 wmware tv-x
开启WSL2,获得docker desktop的最佳性能 windows默认拥有WSL1 PS C:\Users\supermao> wsl --list --verbose NAME STAT ...
- C# .NET CORE .NET6 RSA 公钥加密 私钥解密
环境说明: .NET CORE 版本:.NET 6 . .NET CORE 对于RSA的支持: 1. .NET 6 中内置了对 PKCS1,PKCS8 2种私钥格式的支持. 2. 如果你要部署在Lin ...
- Python编程和机器学习中的自然语言处理:如何从文本中提取有意义的信息和数据
目录 引言 自然语言处理(Natural Language Processing,NLP)是一种人工智能技术,旨在使计算机理解和处理自然语言文本,从中提取有意义的信息和数据.NLP是机器学习领域中的重 ...
- 1.3 Metasploit 生成SSL加密载荷
在本节中,我们将介绍如何通过使用Metasploit生成加密载荷,以隐藏网络特征.前一章节我们已经通过Metasploit生成了一段明文的ShellCode,但明文的网络传输存在安全隐患,因此本节将介 ...