Pandas分类(category)数据处理
分类(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)数据处理的更多相关文章
- Pandas分类
Pandas分类 categorical data是指分类数据:数据类型为:男女.班级(一班.二班).省份(河北.江苏等),若使用赋值法给变量赋值,例如(男=1,女=0),数字1,0之间没有大小之分, ...
- Pandas分类数据
通常实时的数据包括重复的文本列.例如:性别,国家和代码等特征总是重复的.这些是分类数据的例子. 分类变量只能采用有限的数量,而且通常是固定的数量.除了固定长度,分类数据可能有顺序,但不能执行数字操作. ...
- 从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol
关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...
- Objective-C分类 (category)和扩展(Extension)
1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
一. 分类-Category 1. 基本用途:Category 分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...
- Runtime - ③ - 分类Category探究
写博客只是为了让自己学的更深刻,参考:https://tech.meituan.com/DiveIntoCategory.html 分类(Category)是个啥玩意儿这里就不多介绍了,这里主要是研究 ...
- iOS之分类(category)
1.分类(category)的作用 1.1作用:可以在不修改原来类的基础上,为一个类扩展方法.1.2最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? 2.1分类中只能添加“方法”,不能增加 ...
- OC中分类(Category)和扩展(Extension)
1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...
- Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
总结:继承.分类(Category.extension).协议(protocol) 一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...
随机推荐
- hover和position共用出现的问题
hover 鼠标移入的样式 position 定位属性 包含 relative 相对定位 absolute 绝对定位为 fixed 固定定位 hover作用范围 可以实现自己样式的 ...
- web前端之浏览器: 知识汇总
一.URL到页面 准备阶段: 输入URL,Enter进入查找 浏览器在本地查找host文件,匹配对应的IP: 找到返回浏览器并缓存 没有,则进入路由查找: 找到返回浏览器并缓存 再没有,再进入公网DN ...
- 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?
线程调度器是一个操作系统服务,它负责为 Runnable 状态的线程分配 CPU 时间. 一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现.同上一个问题,线程调度并不受到 Java 虚拟 ...
- 在Mac上搭建带ssl协议和域名指向的Apache服务器
顾名思义,就是要在苹果电脑上搭建 Apache 服务器,并且支持 https 协议,能用指定域名访问(有些开发调试需要注册域名,比如调试微信JS-SDK),当然最好能在手机端进行调试.首先,Mac 系 ...
- mvvm的初步思想
1.Object.defineProperty(obj,key,desc); 用法:1.给对象新增属性和特性 2.修改对象属性值和特性 desc(属性特性): 1.enumerable:boolean ...
- 转:python2.x 和 python3.x的区别
注:本文的原文地址为Key differences between Python 2.7.x and Python 3.x 许多 Python 初学者想知道他们应该从 Python 的哪个版本开始学习 ...
- DOM操作方法、属性
话不多说直接上demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Python函数参数与参数解构
1 Python中的函数 函数,从数学的角度来讲是,输入一个参数,经过一个表达式的处理后得到一个结果的输出,即就是x-->y的一个映射.同样,在Python或者任何编程语言中,函数其实就是实现一 ...
- Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
在逛 Stack Overflow 的时候,发现最火的问题竟然是:什么是 NullPointerException(java.lang.NullPointerException),它是由什么原因导致的 ...
- 关于seaJs合并压缩(gulp-seajs-combine )路径与文件ID匹配问题。
前段时间和有大家介绍过用 gulp-seajs-combine 来打包seaJs文件.大家会发现合并seaJs一个很奇怪的现象,那就是它的 ID和路径匹配原则.使得有些文件已经合并过去了,但还是会提示 ...