Pandas 分类数据

2023-11-11

category的创建及其性质

分类变量的创建
(a)用Series创建

pd.Series([“a”, “b”, “c”, “a”], dtype=“category”)得出

0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]

(b)对DataFrame指定类型创建

temp_df = pd.DataFrame({‘A’:pd.Series([“a”, “b”, “c”, “a”], dtype=“category”),‘B’:list(‘abcd’)})
temp_df.dtypes

A category
B object
dtype: object

(c)利用内置Categorical类型创建

cat = pd.Categorical([“a”, “b”, “c”, “a”], categories=[‘a’,‘b’,‘c’])
pd.Series(cat)

0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]

(d)利用cut函数创建
默认使用区间类型为标签

pd.cut(np.random.randint(0,60,5), [0,10,30,60])

[(30, 60], (30, 60], (10, 30], (30, 60], (0, 10]]
Categories (3, interval[int64]): [(0, 10] < (10, 30] < (30, 60]]

可指定字符为标签

pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=[‘0-10’,‘10-30’,‘30-60’])

[10-30, 30-60, 30-60, 10-30, 30-60]
Categories (3, object): [0-10 < 10-30 < 30-60]

分类变量的结构
一个分类变量包括三个部分,元素值(values)、分类类别(categories)、是否有序(order)
从上面可以看出,使用cut函数创建的分类变量默认为有序分类变量
下面介绍如何获取或修改这些属性
(a)describe方法
该方法描述了一个分类序列的情况,包括非缺失值个数、元素值类别数(不是分类类别数)、最多次出现的元素及其频数

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.describe()

count 4
unique 3
top a
freq 2
dtype: object

(b)categories和ordered属性
查看分类类别和是否排序

类别的修改
(a)利用set_categories修改
修改分类,但本身值不会变化

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.cat.set_categories([‘new_a’,‘c’])

0 NaN
1 NaN
2 c
3 NaN
4 NaN
dtype: category
Categories (2, object): [new_a, c]

(b)利用rename_categories修改
需要注意的是该方法会把值和分类同时修改

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.cat.rename_categories([‘new_%s’%i for i in s.cat.categories])

0 new_a
1 new_b
2 new_c
3 new_a
4 NaN
dtype: category
Categories (4, object): [new_a, new_b, new_c, new_d]

利用字典修改值

s.cat.rename_categories({‘a’:‘new_a’,‘b’:‘new_b’})

0 new_a
1 new_b
2 c
3 new_a
4 NaN
dtype: category
Categories (4, object): [new_a, new_b, c, d]

(c)利用add_categories添加

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.cat.add_categories([‘e’])

0 a
1 b
2 c
3 a
4 NaN
dtype: category
Categories (5, object): [a, b, c, d, e]

d)利用remove_categories移除

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.cat.remove_categories([‘d’])

0 a
1 b
2 c
3 a
4 NaN
dtype: category
Categories (3, object): [a, b, c]

(e)删除元素值未出现的分类类型

s = pd.Series(pd.Categorical([“a”, “b”, “c”, “a”,np.nan], categories=[‘a’,‘b’,‘c’,‘d’]))
s.cat.remove_unused_categories()

0 a
1 b
2 c
3 a
4 NaN
dtype: category
Categories (3, object): [a, b, c]

分类变量的排序

前面提到,分类数据类型被分为有序和无序,这非常好理解,例如分数区间的高低是有序变量,考试科目的类别一般看做无序变量

序的建立

(a)一般来说会将一个序列转为有序变量,可以利用as_ordered方法
退化为无序变量,只需要使用as_unordered

s = pd.Series([“a”, “d”, “c”, “a”]).astype(‘category’).cat.as_ordered()
s

0 a
1 d
2 c
3 a
dtype: category
Categories (3, object): [a < c < d]

s.cat.as_unordered()

0 a
1 d
2 c
3 a
dtype: category
Categories (3, object): [a, c, d]

b)利用set_categories方法中的order参数

pd.Series([“a”, “d”, “c”, “a”]).astype(‘category’).cat.set_categories([‘a’,‘c’,‘d’],ordered=True)

0 a
1 d
2 c
3 a
dtype: category
Categories (3, object): [a < c < d]

(c)利用reorder_categories方法
这个方法的特点在于,新设置的分类必须与原分类为同一集合

s = pd.Series([“a”, “d”, “c”, “a”]).astype(‘category’)
s.cat.reorder_categories([‘a’,‘c’,‘d’],ordered=True)
#s.cat.reorder_categories([‘a’,‘c’],ordered=True) #报错
#s.cat.reorder_categories([‘a’,‘c’,‘d’,‘e’],ordered=True) #报错

排序

先前在第1章介绍的值排序和索引排序都是适用的

s = pd.Series(np.random.choice([‘perfect’,‘good’,‘fair’,‘bad’,‘awful’],50)).astype(‘category’)
s.cat.set_categories([‘perfect’,‘good’,‘fair’,‘bad’,‘awful’][::-1],ordered=True).head()

0 good
1 fair
2 bad
3 perfect
4 perfect
dtype: category
Categories (5, object): [awful < bad < fair < good < perfect]

s.sort_values(ascending=False).head()

29 perfect
17 perfect
31 perfect
3 perfect
4 perfect
dtype: category
Categories (5, object): [awful, bad, fair, good, perfect]

df_sort = pd.DataFrame({‘cat’

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 分类数据 的相关文章

随机推荐

  • 基于Loung Attention+LSTM的机器翻译模型

    目录 需要掌握的基础知识 1 Encoder Decoder架构 2 LSTM模型原理 3 Attention机制 基于Loung Attention LSTM的机器翻译模型 模型 数据 训练 基于Bahdanau Attention LS
  • 大数据安全治理平台建设方案

    近年来 随着大数据应用的普及 在新基建 智慧城市 云端应用等大背景趋势下 给我们日常生活便来了很多方便 同时也派生出更多网络安全风险 如企业数据泄露 欺诈 数据违规使用 个人隐私泄露以及企业内部各种威胁和潜在风险 数据是宝贵的资源和财富 当
  • LCD操作原理

    一 LCD原理介绍 LCD内部内部结构 1 lcd由Framebuffer lcd屏幕 信号线 电子枪 lcd控制器组成 2 Framebuffer提供显示数据 lcd屏幕显示 信号线传输Frambuffer中的数据和lcd控制器发出的信号
  • 【深度学习】Attention提速9倍!FlashAttention燃爆显存,Transformer上下文长度史诗级提升...

    转载自 新智元 继超快且省内存的注意力算法FlashAttention爆火后 升级版的2代来了 FlashAttention 2是一种从头编写的算法 可以加快注意力并减少其内存占用 且没有任何近似值 比起第一代 FlashAttention
  • Sqli-labs Less-1 报错注入

    Sqli labs Less 1 报错注入 1 首先打开less1后是一个页面 提示输入id作为参数 输入id 1试一下 然后会出现 name 和 password 添加一个单引号 测试一下注入点 输入单引号发现 会直接将报错结果显示在页面
  • 模拟IC设计——MOS计算及常见MOS管电路

    小生初入模拟IC 作此笔记在大佬面前实属班门弄斧 若有不当之处还请指正 1 MOSFET概述 场效应管与晶体管一样 也具有放大作用 但与普通晶体管是电流控制型器件相反 场效应管是电压控制型器件 它具有输入阻抗高 噪声低的特点 1 MOSFE
  • 使用OpenCV中的matchTemplate函数实现模板匹配【C++版】

    matchTemplate函数原型 void cv matchTemplate InputArray image InputArray templ OutputArray result int method InputArray mask
  • THREEJS - 动态标签(dom方式)

    在三维场景中 我们会有一种需求 需要给三维场景中的模型打上标签 例如展示模型的名称 性能展示等 三维场景打标签的方式很多 有dom sprite Mesh等等 这篇文章来给大家介绍的是一种比较常见的打标签方式 dom 这种方式我们可以自定义
  • WSL2和本地windows端口互通

    众所周知 WSL 默认安装后 只允许windows访问 Windows Subsystem for Linux 而WSL是不能反之访问本地windows 我之前用vmware的思路认为是nat的网络模式 于是改成了桥接 结果wsl的桥接模式
  • springboot日志配输出路径配置_SpringBoot输出日志到文件

    1 基本信息 SpringBoot版本2 2 5 日志框架SLF4J 日志框架的实现LockBack 2 输出文件的配置 2 1 logging file name 指定日志文件的位置 2 1 1 例1 使用相对路径 就会在项目根目录下生成
  • R 语言散点图矩阵

    多个变量之间的关系经常用散点图矩阵表示 ggplot2 包没有提供专门的散点图矩阵 基础 R 图形中提供了 pairs 函数作散点图矩阵 GGally 包提供了一个 ggscatmat 函数作散点图矩阵 例如 对 iris 数据的四个测量值
  • UE4 C++ FString乱码显示问号

    如果以 xxx 这种形式并且xxx为中文时 直接赋值给FString的变量会丢失数据导致系统无法识别 因此需要做特殊处理 第一种解决办法 引号前加L表示将字符串转为unicode的字符串 也就是每个字符占用两个字节 FString str
  • 【无标题】DEFI+NFT新玩法

    DeFi NFT 去中心金融 非同质化货币 NFT Defi就是将流动性挖矿的方法移植到到NFT领域 目前典型的代表有MEME SAND RARI等 区块链行业一直困于 圈内自嗨 无法真正走入大众市场 市场和用户规模的增量相比互联网行业是杯
  • 学习笔记-二叉排序树

    二叉排序树 对于二叉排序树的任何一个非叶子节点 要求左子节点的值比当前节点的值小 右子节点的值比当前节点的值大 如果有相同的值 可以将该节点放在左子节点或右子节点 二叉排序树的创建和遍历 思路 比较节点的值 小于就放在左子节点 大于就放在右
  • 使用 AJAX+JSON 实现用户查询/添加功能

    实现用户查询 添加功能 1 查询功能 准备 selectAllServlet brand html 2 添加功能 addBrand html 表单
  • 基于51单片机的课程设计(毕业设计)——电子贺卡

    本篇文章将介绍一个基于51单片机的电子贺卡 本作品可用于课程设计 毕业设计的参考 其所用到的外设硬件以及程序的代码量都是相对较少的 对于51单片机的初学者 通过本设计熟悉51单片机的使用是非常好的选择 目录 一 实现功能 二 硬件准备 三
  • 短信猫(GSM MODEM)安装指南

    短信猫 GSM MODEM 安装指南 短信猫 又名GSM MODEM 专门针对短信应用设计 内含工业级短信发送模块 简化了通信接口 性能稳定可靠 符合各种商业和工业级短信应用要求 支持向移动 联通以及小灵通用户收发短信 适用于各行各业各个领
  • vue element UI图片上传到fastDFS 前/后台实现图片显示

    第一次开发element图片上传 到网上找了很多例子 感觉不全面 所以才写了这篇文章 希望帮助新手快速开发 vue 使用element实现本地预览 最主要的是将图片路径转换为base64 VUE HTML
  • STM32 江协教程 EXTI外部中断(对射式红外传感器计次、旋转编码器计次)笔记补充 旋转编码器判断方向的两种实现方法记录

    这里是看了江协STM32 EXTI中断视频并配合笔记STM32学习笔记 三 丨中断系统丨EXTI外部中断 对射式红外传感器计次 旋转编码器计次 后的一点小补充 方法一 一方下降沿同时查看另一方电平 以A为例 A下降时若B为高电平则为正向 A
  • Pandas 分类数据

    category的创建及其性质 分类变量的创建 a 用Series创建 pd Series a b c a dtype category 得出 0 a 1 b 2 c 3 a dtype category Categories 3 obje