Pandas分箱/离散化cut与qcut的区别

news2024/10/5 3:32:00

cut与qcut区别

      • 1、pd.cut()
      • 2、pd.qcut()
      • 3、cut与qcut区别




Pandas提供了智能剪贴功能:pd.cut()pd.qcut(),它们通常用于更方便直观地处理关系型或标签型数据,将数据进行分箱/离散化

1、pd.cut()


我们可以通过两种方式使用cut()函数:直接指定bin的数量,让Pandas为我们计算等大小的bin,或者我们可以按照自己的意愿手动指定bin的边缘

cut()函数中,bin边缘的间距大小是相等的,每个bin或箱中的元素数量不均匀。例如,如果对年龄进行分箱,0-1岁是婴儿,1-12岁是孩子,12-18岁是青少年,18-60岁是成年人,60岁以上是老年人。所以我们可以设置:

bins=[0, 1, 12, 18, 60, 140]
labels=['infant', 'kid', 'teenager', 'grownup', 'senior citizen']

cut()的API如下:

pd.cut(x,bins,right,labels,retbins,precision,include_lowest,duplicates,ordered)

其参数及说明如下:

  • x:需要进行分箱的数据,1D数组或系列类型,如果数据存在NaN则报错
  • bins:分箱的边界,如果是单个整数,则表示基于数据中的最小值和最大值生成等间距间隔;也可以是自定义边界值的列表或数组
  • right:是否包含最右边的数值,默认为True(右闭)
  • labels:分箱的标签,长度保持与分箱数一致
  • retbins:是否显示分箱的边界值,默认为False。当bins为整数时设置True可以显示边界值
  • precision:分箱边界的精度,默认3位小数
  • include_lowest:是否包含最左边的数值,默认为False(左开)
  • duplicates:默认为raise,如果分箱的边界不唯一,则引发ValueError;指定drop则去重
  • ordered:标签是否有序,默认为True,分类结果将被排序

以下是一个使用示例:

import pandas as pd
import numpy as np

# 数据准备
years = [2024, 2023, 2017, 2011, 2015, 2023, 2008, 2010]
df = pd.DataFrame(years, columns=['Year'])

基本使用如下:

# 左开右闭
print(pd.cut(df['Year'], bins=3, precision=0))

在这里插入图片描述
数据的年份范围是2008年到2024年(16个),当我们指定bins=3时,Pandas将它切分成3个等宽的bin,每个bin5-6年。需要注意的是,Pandas会自动将第一类的下限值丢失精度,以确保将2008年也包括在结果中

# 左闭右闭
print(pd.cut(df['Year'], bins=3, include_lowest=True, precision=0))

在这里插入图片描述

可以将标签参数指定为一个列表,而不是获得间隔,以便更好地分析:

# 指定分类标签
df['Label'] = pd.cut(df['Year'], bins=3, labels=['Old', 'Medium', 'New'], precision=0)
print(df)

在这里插入图片描述
如果指定labels=False,我们将得到bin的数字表示(从0依次开始递增):

df['Label'] = pd.cut(df['Year'], bins=3, labels=False)
print(df)

在这里插入图片描述
查看每个分箱中的值数量:

print(df['Label'].value_counts().reset_index())

在这里插入图片描述
显示分箱的边界值:

# 我们可以指定retbins=True一次性获得bin区间和边界值离散的序列,此时方法返回一个二元组
cut_series, cut_intervals = pd.cut(df['Year'], bins=3, retbins=True, precision=0)
# bin区间
print(cut_series)
# 分箱的边界值
print(cut_intervals)

在这里插入图片描述
我们也可以通过给bins参数传入一个列表来手动指定bin的边缘:

# 自定义bin边缘
print(pd.cut(df['Year'], bins=[2008, 2010, 2020, 2024], include_lowest=True))

在这里插入图片描述
这里,我们设置了include_lowest=True,默认情况下,它被设置为False,因此,当Pandas看到我们传递的列表时,它将把2008年排除在计算之外。因此,这里我们也可以使用任何小于2008的值

2、pd.qcut()


qcut()函数(Quantile-Cut)与cut()的关键区别在于,在qcut()中,每个bin中的元素数量将大致相同,但这将以不同大小的bin区间宽度为代价

qcut()函数中,当我们指定q=5时,我们告诉Pandas将数据列切成5个相等的量级,即0-20%,20-40%,40-60%,60-80%和80-100%桶/箱

qcut()的API如下:

pd.qcut(x,q,labels,retbins,precision,duplicates)

其参数及说明如下:

  • x:需要进行分箱的数据,1D数组或系列类型,如果数据存在NaN则保留
  • q:分位数,例如4用于四分位,也可以指定为列表[0,0.25,0.5,0.75,1]
  • 其他参数:同pd.cut()

给数据注入一个缺失值,我们看下qcut()将如何处理一个包含NaN的数据集

# 添加NaN值
df.loc[0, 'Year'] = np.NaN

以下是一个使用示例:

# 左开右闭
print(pd.qcut(df['Year'], q=3))

在这里插入图片描述
你是否注意到,在输出结果中,NaN值也被保留为NaN?

指定分箱标签:

# 指定分箱标签
df['Label'] = pd.qcut(df['Year'], q=3, labels=['Old', 'Medium', 'New'])
print(df)

在这里插入图片描述
自定义分箱量级:

# 自定义分箱量级
print(pd.qcut(df['Year'], q=[0, 1 / 3, 2 / 3, 1]))

在这里插入图片描述
可以看到,分箱的边缘是不等宽的,因为它要容纳每个桶1/3的值,因此它要自己计算每个箱子的宽度来实现这一目标

3、cut与qcut区别


综上所述,现对cut()qcut()方法的使用区别作如下总结:

  • cut()分箱边缘是等间距的,因此,箱中的元素数量不均;qcut()分箱箱中的元素数量是均匀的,因此,箱边缘不是等间距的
  • cut()分箱数据如果存在NaN则报错;qcut()分箱则将存在的NaN保留


参考文章:https://geek-docs.com/pandas/pandas-tutorials/how-to-use-pandas-cut-and-qcut.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2,它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权: -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Android Studio学习4——gradle文件

视频讲解 https://developer.android.google.cn/studio/releases/gradle-plugin.htmIl#updating-gradle

二分查找与搜索树高频问题-算法通关村

二分查找与搜索树高频问题-算法通关村 1 基于二分查找的拓展问题 1.1 山脉数组的封顶索引 LeetCode852:这个题的要求有点啰嗦,核心意思就是在数组中的某位位置i开始,从0到 i 是递增的,从i1到数组最后是递减的,让你找到…

JavaEE 初阶篇-深入了解线程池(线程池创建、线程池如何处理任务)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 线程池概述 1.1 线程池的优点 1.2 不使用线程池的问题 1.3 线程池的工作原理图 1.4 如何创建线程池? 2.0 通过 ThreadPoolExecutor 类自定义创建线程…

数据结构与算法笔记:递归函数设计技巧

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一,课程链接: 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载: https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单,参数量较少,并且没有卷积层和dropout等,最终准确率…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 结构体作为一种数据结构,其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

测试自动化流程设计思路

a) 背景介绍 基于当前互联网敏捷开发的现状,手工人力测试已不足以满足当前快速的版本迭代;以下将介绍一种可实现的自动化设计与使用。 b) 当前版本迭代流程 研发同学从代码库master分支拉出新代码进行研发工作得开发开发完成之后提交到代码库测试同学介入…

从概念到实践:探索独立站在当代电商中的关键作用

随着数字化时代的到来,电子商务已成为全球商业生态的核心组成部分。在这个不断变化的市场中,独立站作为企业建立在线身份和拓展业务的强大工具,正逐步展现出其不可替代的价值。 从概念到实践,本文将深入探索独立站在当代电商中的关…

C++从入门到精通——类的作用域及类的实例化

类的作用域及类的实例化 前言一、类的作用域二、类的实例化引例类是对对象进行描述的示例 一个类可以实例化出多个对象示例 示例 前言 类的作用域是指类中定义的变量和方法的可见性和可访问性范围。在类的内部,所有成员(包括属性和方法)都具…

LeetCode-51. N 皇后【数组 回溯】

LeetCode-51. N 皇后【数组 回溯】 题目描述:解题思路一:回溯, 回溯三部曲。验证是否合法只需要检查:1.正上方;2. 左上方;3.右上方。因为是从上到下,从左到右遍历的,下方不可能有皇后。解题思路…

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录 XML&XXE-传输-原理&探针&利用&玩法 XXE 黑盒发现 XXE 白盒发现 XXE修复防御方案 有回显 无回显 XML&XXE-黑盒-JSON&黑盒测试&类型修改 XML&XXE-白盒-CMS&PHPSHE&无回显 知识点: 1、XXE&XML-原理-用途&…

Unity与CocosCreator对比学习二

一、锚点与适配 1.在Creator中 适配通过锚点、位置和Widget达到适配目的;锚点是节点在其父节点坐标系中坐标对其点,其x,y范围在[0, 1]之间; 锚点为(0, 0)时在节点自身的左下角,节点坐标指其左下角在父节点中的坐标;锚…

【2024系统架构设计】案例分析- 5 Web应用

目录 一 基础知识 二 真题 一 基础知识 1 Web应用技术分类 大型网站系统架构的演化:高性能、高可用、可维护、应变、安全。 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。

内存管理(SRAM)

内存管理介绍 内存管理实际上就是指管理SRAM. 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如 何高效、快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,其实最终都是要实现两…

用vscode仿制小米官网

html内容: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel&quo…

无线基本认识和配置

1、无线局域网 IEEE 802.11标准 根据应用范围分类 WPAN --- 个人无线网络 NFC、ZIgbee、Bluetooth WLAN --- 无线局域网 WiFi&#xff0c;使用到WPAN技术 WMAN --- 无线城域网 WiMax 802.16 WWAN --- 无线广域网 GSM、CDMA、WCDMA、LTE、5G、TD-SCDMA 2、…

PG 中的 MAXALIGN 及对齐分配内存(MemoryContextAllocAligned)

在PG源码中&#xff0c;MAXALIGN这个宏&#xff0c;返回最接近输入数字&#xff08;大于&#xff09;且能整除8的数&#xff0c;仅此而已。 常用于内存相关的计算&#xff0c;在PG代码中使用的相当广泛&#xff0c;为啥要用这个MAXALIGN&#xff1f;我估计是基于 “CPU访问对齐…

数据库同步方案Sqlserver

数据库同步方案探究 随着信息技术的迅猛发展&#xff0c;数据库在各个领域的应用日益广泛。而在分布式系统、云计算、大数据等场景下&#xff0c;数据库同步成为了一个至关重要的问题。数据库同步不仅关乎数据的完整性和一致性&#xff0c;还直接影响到系统的稳定性和性能。因…

加薪非要老总批?--责任链模式

1.1 老板&#xff0c;我要加薪 "我和刚进来的几个同事比较&#xff0c;我觉得我做得很好。公司每每分配的任务&#xff0c;我基本都可以快速完成。有一次&#xff0c;一段程序需要增加一个分支条件&#xff0c;我立刻想到利用反射、工厂等设计模式来处理&#xff0c;经理对…