一、简介

  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类型及应用的更多相关文章

  1. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  2. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  3. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  4. (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线

    1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改 ...

  5. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  6. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  7. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  8. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  9. (数据科学学习手札80)用Python编写小工具下载OSM路网数据

    本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...

随机推荐

  1. XTTS系列之一:U2L迁移解决方案之XTTS的使用

    本系列的定位是对XTTS及相关技术进行深入的学习研究.作为本系列的开篇,本着实用性的原则,我先把一次实际生产环境U2L的迁移实战实施方案进行提炼简化,旨在能清楚说明该如何使用XTTS这种解决方案来进行 ...

  2. google、谷歌浏览截图

    对于前端好用的浏览器---谷歌浏览器(没有插件)截取全屏很难受! 特备是前端,想截图下来,好好的量一下容器之前的尺寸(手动恼火) 对于程序员来说不一定需要插件,有很多大佬应该都知道, 小白记忆不好,每 ...

  3. 给定一个IP地址,转化为二进制32位,再转化为十进制,写出一个方法让其十进制转为IP地址

    十进制是已知的数值 第一种方法: <script type="text/javascript"> var num=2148140545; var str=num.toS ...

  4. 简单的JSP分页显示

    1.mysql的limit关键字 (DAO) select * from tablename limit startPoint, numberPerPage; tablename 就是要分页显示的那张 ...

  5. TestNG在Eclipse中运行的几种方法

    目录 1 在Eclipse Outline视图中,点右键run as TestNG Test (不推荐) 2 在Eclipse类编辑界面,直接点击右键run as TestNG Test 3 通过Te ...

  6. pheatmap绘制“热图”,你需要的都在这

    热图可以聚合大量的数据,并可以用一种渐进色来优雅地表现,可以很直观地展现数据的疏密程度或频率高低. 本文利用R语言 pheatmap 包从头开始绘制各种漂亮的热图.参数像积木,拼凑出你最喜欢的热图即可 ...

  7. VSTO之PowerPoint(PPT)插件开发常用API汇总

    VSTO简介 VSTO(Visual Studio Tools for Office )是VBA的替代,使得开发Office应用程序更加简单,并且用VSTO来开发office应用程序可以使用Visua ...

  8. .netcore持续集成测试篇之开篇简介及Xunit基本使用

    系列目录 为了支持跨平台,微软为.net平台提供了.net core test sdk,这样第三方测试框架诸如Nunit,Xunit等只需要按照sdk提供的api规范进行开发便可以被dotnet cl ...

  9. Java连载14-补码简介&浮点型整数

    一.补码简介 1.计算机中的符号数有三种表示方式,即为:原码.反码.补码.三种表示方法均有符号位和数值位,符号位都是0表示正数,符号位都是1表示负数. 2.计算机中的数字的存储方式:在计算机系统中,数 ...

  10. kafka客户端和服务端开发(三)

    前面我们已经搭建了kafka的单机和集群环境,分别写了简单的实例代码,对于代码里面使用到的参数并没有做解释.下面我们来详细说一下各个参数的作用. 1. 创建kafka生产者 kafka生产者有3个必选 ...