(数据科学学习手札68)pandas中的categorical类型及应用
一、简介
categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别、血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内容及应用进行介绍。
二、创建与应用
2.1 基本特性和适用场景
在介绍具体方法之前,我们需要对pandas数据类型中的categorical类型有一个了解,categorical类似R中的因子型变量,可以进行排序操作,但不可以进行数值运算操作,其顺序在其被定义的时候一同确定,而不是按照数字字母词法排序的顺序,其适用场景有如下几个:
1、具有少数几种可能取值并存在大量重复的字符串字段,利用categorical类型对其转换后可有效节省内存
2、字段的排序规则特殊,不遵循词法顺序时,可以利用categorical类型对其转换后得到用户所需的排序规则、
2.2 创建方式
pandas中创建categorical型数据主要有如下几种方式:
1、对于Series数据结构,传入参数dtype='category'即可:
#直接创建categorical型Series
series_cat = pd.Series(['B','D','C','A'], dtype='category')
#显示Series信息
series_cat
可以看到,series_cat的类型为category,但是没有声明顺序,这时若对Series排序,实际上还是按照词法的顺序:
series_cat.sort_values()
2、对于DataFrame,在定义数据之后转换类型:
#创建数据框
df_cat = pd.DataFrame({
'V1':['A','C','B','D']
})
#转换指定列的数据类型为category
df_cat['V1'] = df_cat['V1'].astype('category')
df_cat['V1']
3、利用pd.Categorical()生成类别型数据后转换为Series,或替换DataFrame中的内容:
categorical_ = pd.Categorical(['A','B','D','C'],
categories=['A','B','C','D'])
series_cat = pd.Series(categorical_)
series_cat
categorical_ = pd.Categorical(['A','B','D','C'],
categories=['A','B','C','D'])
df_cat = pd.DataFrame({
'V1':categorical_
})
df_cat['V1']
而pd.Categorical()独立创建categorical数据时有两个新的特性,一是其通过参数categories定义类别时,若原数据中出现了categories参数中没有的数据,则会自动转换为pd.nan:
categorical_ = pd.Categorical(['A','B','D','C'],
categories=['B','C','D'])
df_cat = pd.DataFrame({
'V1':categorical_
})
df_cat['V1']
另外pd.Categorical()还有一个bool型参数ordered,设置为True时则会按照categories中的顺序定义从小到大的范围:
categorical_ = pd.Categorical(['A','B','D','C'],
categories=['A','B','C','D'],
ordered=True)
df_cat = pd.DataFrame({
'V1':categorical_
})
df_cat['V1']
4、利用pandas.api.types中的CategoricalDtype()对已有数据进行转换
通过CategoricalDtype(),我们可以结合astype()完成从其他类型数据向categorical数据的转换过程,利用CategoricalDtype()的参数categories、ordered,弥补.astype('category')的短板(实际上.astype('category')等价于.astype(CategoricalDtype(categories=None, ordered=False))):
from pandas.api.types import CategoricalDtype
#创建数据框
df_cat = pd.DataFrame({
'V1':['A','C','B','D']
})
cat = CategoricalDtype(categories=['A','C','B'],
ordered=True)
df_cat['V1'] = df_cat['V1'].astype(cat)
df_cat['V1']
2.3 应用
categorical型数据主要应用于自定义排序,如下例,我们创建了一个包含字符型变量class和数值型变量value的数据框:
import numpy as np df = pd.DataFrame({
'class':np.random.choice(['A','B','C','D'],10),
'value':np.random.uniform(0,10,10)
})
df.head()
如果按照class列排序得到的结果是按照字母自然顺序:
df.sort_values('class')
而通过将class列修改为自己定义的排序方式则得到的结果如下:
from pandas.api.types import CategoricalDtype
cat = CategoricalDtype(categories=['B','D','A','C'],
ordered=True)
df['class'] = df['class'].astype(cat)
df.sort_values('class')
若想要临时修改排序规则,可以使用.cat.reorder_categories()方法:
df['class'].cat.reorder_categories(['D','B','C','A'],
ordered=True,
inplace=True)#iinplace参数设置为True使得变动覆盖原数据
df.sort_values('class')
关于pandas中的categorical型数据还有很多的小技巧,因为不常用这里就不再赘述,感兴趣可以查看pandas的官方文档,以上就是本文的全部内容,如有笔误望指出!
(数据科学学习手札68)pandas中的categorical类型及应用的更多相关文章
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- (数据科学学习手札42)folium进阶内容介绍
一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
- (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线
1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
随机推荐
- lr录制选项设置代理
解决录制时浏览器打不开录制时录不到脚本等浏览器兼容问题一.lr录制选项设置代理1.点击Options 2.点击Port Mapping→Newentrv 3.lr代理设置 ·Socket Servic ...
- Hadoop自学系列集(一) ---- 使用VMware安装CentOS
1.概述 笔者的学习环境--在VMware虚拟机下安装四个CentOS系统(搭建Hadoop集群用),其中一个为Master,三个为Slave,Master作为Hadoop集群中的NameNode, ...
- ubuntu kylin的桌面崩溃问题
前几天安了ubuntu kylin,主题还是挺好看的,汉化也很好,就是各种报桌面错误,忍了,结果今天直接进不去桌面了 开机,输入密码,登录,然后桌面死活不显示,还弹出了错误提示我系统有问题,建议重启 ...
- 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库
在这篇文章中,我展示了如何在Linux上构建针对.NET Framework版本的.NET项目,而不使用Mono.通用使用微软新发布的 Mocrosoft.NETFramework.Reference ...
- Ubuntu下python安装mysqldb(驱动)
最近在学习Django框架,需要使用到数据库,我使用的是mysql,跟java一样,需要安装驱动,这是驱动的下载网址http://sourceforge.net/projects/mysql-pyth ...
- nginx 之负载均衡 :PHP session 跨多台服务器配置
公司一个项目单点压力越来越大,考虑到稳定性和降压,使用nginx做负载均衡,将请求分发到多个docker上去,这里记录下PHP多服务器间的会话session共享问题,解决方案是把session单独存在 ...
- umask 默认权限控制和特殊权限
权限简单介绍: 在Linux中,创建目录或者文件之后总会有默认的权限.共9个,分为三组.分别代表u.g.o(属主.属组.其他用户).r.w.x 也代表各自的权限. r:读 在文件中的权限代表次文件 ...
- 重入锁的学习 (ReentrantLock)
重入锁 :(ReentrantLock) 上锁 用reentrantLock.lock 方法 解锁 用reentrantLock.unlock 方法 上锁和解锁 必须配对 可以多重上锁 Reentr ...
- 使用富文本编辑器Kindeditor
今天在做需求的时候,遇到有一个字段,需要保存带有格式的内容,决定使用富文本框编辑器Kindeditor来实现,解决方法如下: 登录官网下载控件包: http://kindeditor.net/down ...
- 什么是Singleton?
Singleton:在Java中即指单例设计模式,它是软件开发中最常用的设计模式之一. 单:指唯一 例:指实例 单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式. 要点: ...