分类(Category)数据:直白来说,就是取值为有限的,或者说是固定数量的可能值。例如:性别、血型

指定数据类型构建分类数据

dtype="category"

  以血型为例,创建一个关于血型的分类对象

import pandas as pd
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="bloo d_type", dtype="category")
user_info
"""
name
Tom A
Bob AB
Mary NaN
James AB
Andy O
Alice B
Name: bloo d_type, dtype: category
Categories (4, object): [A, AB, B, O]
"""

使用 pd.Categorical 来构建分类数据

import pandas as pd
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")
# categories:自定义类别数据
pd.Categorical(user_info, categories=["A", "B", "AB"])
"""
[A, AB, NaN, AB, NaN, B]
Categories (3, object): [A, B, AB]
"""

转为分类数据

  我们经常遇到的情况是已经创建了一个 Series,如何将它转为分类数据呢?来看看 astype 用法吧

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

常用操作

.describe()

  可以对分类数据使用 .describe() 方法,得到的结果与 string 类型的数据相同

user_info.describe()
"""
count 5
unique 4
top AB
freq 2
Name: bloo d_type, dtype: object
""" """
count:非空的数据有5条
unique:去重后的非空数据有4条
top:出现次数最多的值为 AB
freq:出现次数最多的值的次数为2次。
"""

.cat.categories  

  使用 .cat.categories 来获取分类数据所有可能的取值:

user_info.cat.categories
"""
Index(['A', 'AB', 'B', 'O'], dtype='object')
"""

.cat.rename_categories  

  使用 .cat.rename_categories 方法来重命名分类名称

user_info.cat.rename_categories(["A+", "AB+", "B+", "O+"])

  添加、删除分类的操作,这些都可以通过 .cat.add_categories 、.cat.remove_categories 来实现。

.value_counts()

  使用 value_counts 方法来查看数据分布的

user_info.value_counts() 

.str 属性  

  使用 .str 属性来访问分类数据

# 查看是否包含字母 "A
user_info.str.contains("A")

pd.concat

  使用 pd.concat 分类数据合并

blood_type1 = pd.Categorical(["A", "AB"])
blood_type2 = pd.Categorical(["B", "O"])
pd.concat([pd.Series(blood_type1), pd.Series(blood_type2)])

union_categoricals   

  分类数据经过 pd.concat 合并后类型转为了 object 类型,如果想要保持分类类型的话,可以借助 union_categoricals 来完成。

from pandas.api.types import union_categoricals
union_categoricals([blood_type1, blood_type2])

内存使用量

  Categorical 的内存使用量是 与分类数乘以数据长度成正比

  object 类型的数据 是一个 常数*数据的长度

  在类别的数量很少的情况下,分类数据非常节省内存

blood_type = pd.Series(["AB","O"]*1000)
blood_type.nbytes #
blood_type.astype("category").nbytes #

  当类别的数量接近数据的长度,那么 Categorical 将使用与等效的 object 表示几乎相同或更多的内存

blood_type = pd.Series(['AB%04d' % i for i in range(2000)])
blood_type.nbytes #
blood_type.astype("category").nbytes #

Pandas分类(category)数据处理的更多相关文章

  1. Pandas分类

    Pandas分类 categorical data是指分类数据:数据类型为:男女.班级(一班.二班).省份(河北.江苏等),若使用赋值法给变量赋值,例如(男=1,女=0),数字1,0之间没有大小之分, ...

  2. Pandas分类数据

    通常实时的数据包括重复的文本列.例如:性别,国家和代码等特征总是重复的.这些是分类数据的例子. 分类变量只能采用有限的数量,而且通常是固定的数量.除了固定长度,分类数据可能有顺序,但不能执行数字操作. ...

  3. 从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  4. 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...

  5. Objective-C分类 (category)和扩展(Extension)

    1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...

  6. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  7. Runtime - ③ - 分类Category探究

    写博客只是为了让自己学的更深刻,参考:https://tech.meituan.com/DiveIntoCategory.html 分类(Category)是个啥玩意儿这里就不多介绍了,这里主要是研究 ...

  8. iOS之分类(category)

    1.分类(category)的作用 1.1作用:可以在不修改原来类的基础上,为一个类扩展方法.1.2最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? 2.1分类中只能添加“方法”,不能增加 ...

  9. OC中分类(Category)和扩展(Extension)

    1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...

  10. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

随机推荐

  1. ng 循环数据

    显示数据的索引值 在ts中 public list:any[]=[ {title:"新闻1",},{title:"新闻2"},{title:"新闻3& ...

  2. 快学Scala 第八课 (嵌套类)

    嵌套类: class Human { class Student{ val age = 10 } } object ClassDemo { def main(args: Array[String]): ...

  3. redis系列之------简单的动态字符串(SDS)

    前言 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的 ...

  4. 数据结构中数组反转与STL库Algorithm中的reverse

    数组是个基本的线性数据结构,其实是内存中的一个块,我们可以通过c++的new来分配一个数组 int* a= new int[5]; 然后填数组的每个元素 a[0]=1; a[1]=2; a[2]=6; ...

  5. JVM垃圾回收(下)

    接着上一篇,介绍完了 JVM 中识别需要回收的垃圾对象之后,这一篇我们来说说 JVM 是如何进行垃圾回收. 首先要在这里介绍一下80/20 法则: 约仅有20%的变因操纵着80%的局面.也就是说:所有 ...

  6. 窥见云技术未来大势,腾讯云Techo开发者大会即将在京召开

    云.物联网.5G.人工智能……一项项技术的突破带来了天翻地覆的变化,开发者们是如何一次次地进行天马行空的创意和极限突破?2019年11月6日-7日,由腾讯云主办的首届Techo开发者大会将在北京嘉里大 ...

  7. redis数据库的使用

    一.安装redis与可视化操作工具 可视化工具:RedisDesktopManager redis载地址:https://github.com/MSOpenTech/redis/releases. 二 ...

  8. django-Xadmin后台管理

    0919自我总结 django-Xadmin后台管理 一.安装环境 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 ...

  9. Python之网络编程Socket

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  10. PHP array_search

    1.函数的作用:在数组中查找元素 2.函数的参数: @params mixed  $needle @params array $haystack @params bool $strict 3.例子: ...