内容目录

  • 1. 创建对象
  • 2. 常用操作
  • 3. 内存使用量的陷阱

一、创建对象

  • 1.基本概念:分类数据直白来说就是取值为有限的,或者说是固定数量的可能值。例如:性别、血型。
  • 2.创建分类数据:这里以血型为例,假定每个用户有以下的血型,我们如何创建一个关于血型的分类对象呢?

方法一:明确指定 dtype="category"

index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")
user_info = pd.Series(data=["A", "AB", np.nan, "AB", "O", "B"], index=index, name="blood_type", dtype="category")
user_info
Out[6]:
name
Tom A
Bob AB
Mary NaN
James AB
Andy O
Alice B
Name: blood_type, dtype: category
Categories (4, object): [A, AB, B, O]

方法二:使用 pd.Categorical 来构建分类数据。

pd.Categorical(["A", "AB", np.nan, "AB", "O", "B"])
Out[7]:
[A, AB, NaN, AB, O, B]
Categories (4, object): [A, AB, B, O]
  • 3.自己制定类别数据所有可能的取值。

假定我们认为血型只有 A、B 以及 AB 这三类,那么我们可以这样操作。

#定制分类数据所有可能的取值
pd.Categorical(["A", "AB", np.nan, "AB", "O", "B"], categories=["A", "B", "AB"])
Out[8]:
[A, AB, NaN, AB, NaN, B]
Categories (3, object): [A, B, AB]
  • 4.Series转为分类数据,astype
#将遗传序列转化为分类数据
user_info = pd.Series(data=["A", "AB", np.nan, "AB", "O", "B"], index=index, name="blood_type")
user_info = user_info.astype("category")
user_info
Out[9]:
name
Tom A
Bob AB
Mary NaN
James AB
Andy O
Alice B
Name: blood_type, dtype: category
Categories (4, object): [A, AB, B, O]
  • 5.此外,一些其他的方法返回的结果也是分类数据。如 cut 、 qcut。具体可以见 Pandas基本功能详解中的离散化部分。

二、常用操作

可以对分类数据使用 .describe() 方法,它得到的结果与 string类型的数据相同。
count 表示非空的数据有5条,unique 表示去重后的非空数据有4条,top 表示出现次数最多的值为 AB,
freq 表示出现次数最多的值的次数为2次。
我们可以使用 .cat.categories 来获取分类数据所有可能的取值。
重命名分类数据:cat.rename_categories
添加分类数据:.cat.add_categories
删除分类数据:.cat.remove_categories
查看数据分布:.value_counts()
通过.str访问
合并数据,用concat,类型变为object
保留分类数据类型,union_categoricals user_info.describe()
Out[86]:
count 5
unique 4
top AB
freq 2
Name: blood_type, dtype: object
user_info.cat.rename_categories(["A+", "AB+", "B+", "O+"])
Out[87]:
name
Tom A+
Bob AB+
Mary NaN
James AB+
Andy O+
Alice B+
Name: blood_type, dtype: category
Categories (4, object): [A+, AB+, B+, O+]
user_info.str.contains('A')
Out[88]:
name
Tom True
Bob True
Mary NaN
James True
Andy False
Alice False
Name: blood_type, dtype: object
#合并数据
blood_type1 = pd.Categorical(["A", "AB"])
blood_type2 = pd.Categorical(["B", "O"])
pd.concat([pd.Series(blood_type1), pd.Series(blood_type2)])
Out[89]:
0 A
1 AB
0 B
1 O
dtype: object
#保留分类数据
from pandas.api.types import union_categoricals
union_categoricals([blood_type1, blood_type2])
Out[90]:
[A, AB, B, O]
Categories (4, object): [A, AB, B, O]

 cat所有属性

[name for name in user_info.cat.__dir__() if not name.startswith('_')]
Out[92]:
['add_categories',
'as_ordered',
'as_unordered',
'categories',
'codes',
'ordered',
'remove_categories',
'remove_unused_categories',
'rename_categories',
'reorder_categories',
'set_categories']

三、内存使用量的陷阱

Categorical 的内存使用量是与分类数乘以数据长度成正比,object 类型的数据是一个常数乘以数据的长度。

blood_type = pd.Series(["AB","O"]*1000)
blood_type.nbytes
Out[79]: 16000
blood_type.astype("category").nbytes
Out[80]: 2016
blood_type = pd.Series(['AB%4d' % i for i in range(2000)])
blood_type.nbytes
Out[81]: 16000
blood_type.astype("category").nbytes
Out[82]: 20000

  

Pandas系列(五)-分类数据处理的更多相关文章

  1. Pandas系列之入门篇

    Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...

  2. Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图

    Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方便的开发模 ...

  3. Hexo系列(五) 撰写文章

    在利用 Hexo 框架搭建一个属于我们自己的博客网站后,下面我们就来谈谈怎样在网站上书写我们的第一篇博客吧 一.创建文章 在站点文件夹中打开 git bash,输入如下命令创建文章,其中 title ...

  4. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  5. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  6. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

  7. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  8. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  9. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

  10. 系列五AnkhSvn

    原文:系列五AnkhSvn AnkhSvn介绍 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新.添加文件,而不用在命令行或资源管理器中提交.而且该插件属于开 ...

随机推荐

  1. 建立第一个SpringBoot小列子(碰到的错误)

    当加入@SpringBootApplication注解时,无法得到解析 错误提示:SpringBootApplication cannot be resolved to a type 错误原因是因为s ...

  2. 码农人生——从未学过Android如何开发Android App 案例讲解-第002期案例

    标题有点晃眼,本次分享是002期博文的实践故事,不会有任何代码.也不会教别人android 如何开发,类似博文已经有大批大批,而且还会有陆陆续续的人写,我写的文章,主要是经验之谈,希望总结出的一些方法 ...

  3. JavaScript对象类型之创建对象

    引言 JavaScript中,可以通过对象直接量,关键字new(ECMAScript 5中的)Object.create(),函数来创建对象. 对象直接量 JavaScript中使用对象直接量来创建对 ...

  4. vim之快速查找功能

    vim有强大的字符串查找功能. 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ?  加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入  /super  或者 ...

  5. centos7下kubernetes(18。kubernetes-健康检查)

    自愈能力是容器的重要特性.自愈的默认方式是自动重启发生故障的容器. 用户还可以通过liveness和readiness探测机制设置更精细的健康检查,进而实现: 1.零停机部署 2.避免部署无效的镜像 ...

  6. Java 前后端List传值

    js代码 function click(){ var arrays = new Array(); for (var i = 0; i < arr.length; i++) { arrays.pu ...

  7. shell杀死指定端口的进程

    杀死端口代码如下: lsof -i: kill - PID 上面的与下面的代码作用相同. 命令如下所示(这种方式更自动化): kill - $(netstat -nlp | grep : | awk ...

  8. P5239 回忆京都(洛谷3月月赛T2)

    题目描述 射命丸文在取材中发现了一个好玩的东西,叫做组合数. 组合数的定义如下:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合.所有组合的数量,就是组合数 ...

  9. VUE中 style scoped 修改原有样式

    作用域CSS 当<style>标记具有该scoped属性时,其CSS将仅应用于当前组件的元素.这类似于Shadow DOM中的样式封装.它有一些警告,但不需要任何polyfill.通过使用 ...

  10. SQLserver查询库中包含某个字段的表

    select [name] from [TPMS_PRD].[dbo].sysobjects where id in(select id from [TPMS_PRD].[dbo].syscolumn ...