python中pd.cut()与pd.qcut()的对比及示例


Posted in Python onJune 16, 2022

1、pd.cut()

用于将数据值按照值本身进行分段并排序到 bins 中。
参数包含:x, bins, right, include_lowest, labels, retbins, precision

x :被划分的数组
bins :被划分的区间/区间数

  • - ① 当 bins 为整数时,表示数组 x 被划分为多少个等间距的区间;
  • - ② 当 bins 为序列时,表示数组 x 将被划分在该指定序列中,若不在则输出 NaN;
# x = [1,2,3,5,3,4,1],  bins = 3
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),3)  
[Out] [(0.996, 2.333], (0.996, 2.333], (2.333, 3.667], (3.667, 5.0], (2.333, 3.667], (3.667, 5.0], (0.996, 2.333]]
      Categories (3, interval[float64]): [(0.996, 2.333] < (2.333, 3.667] < (3.667, 5.0]]

# x = [1,2,3,5,3,4,1],  bins = [1,2,3]
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),[1,2,3])
[Out] [NaN, (1.0, 2.0], (2.0, 3.0], NaN, (2.0, 3.0], NaN, NaN]
      Categories (2, interval[int64]): [(1, 2] < (2, 3]]

right :是否包含右端点,默认为 True;
include_lowest :是否包含左端点,默认为 False;

# x = [1,2,3,5,3,4,1],  bins = [1,2,3], 默认不包含左端点 1,默认包含右端点 3
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),[1,2,3])
[Out] [NaN, (1.0, 2.0], (2.0, 3.0], NaN, (2.0, 3.0], NaN, NaN]
      Categories (2, interval[int64]): [(1, 2] < (2, 3]]

# x = [1,2,3,5,3,4,1],  bins = [1,2,3], 设置包含左端点 1,设置包含右端点 3
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),[1,2,3],include_lowest=True,right=False)
[Out] [[1.0, 2.0), [2.0, 3.0), NaN, NaN, NaN, NaN, [1.0, 2.0)]
      Categories (2, interval[int64]): [[1, 2) < [2, 3)]

labels :是否用标记来替代返回的 bins,默认为 False,如需标记,标记数需与 bins 数一致,并为 labels 赋值一组列表;

# x = [1,2,3,5,3,4,1],  bins = 3, 设置用指定标签 ['A','B','C'] 返回序列
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),3,labels=['A','B','C'])
[Out] [A, A, B, C, B, C, A]
      Categories (3, object): [A < B < C]

retbins : 是否返回间距 bins,默认为 False,仅返回 x 中每个值对应的 bin 的列表,若 retbins = True,则返回 bin 的列表及对应的 bins。

# x = [1,2,3,5,3,4,1],  bins = 3, 设置一并返回对应 bins 序列
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),3,retbins=True)
[Out] ([(0.996, 2.333], (0.996, 2.333], (2.333, 3.667], (3.667, 5.0], (2.333, 3.667], (3.667, 5.0], (0.996, 2.333]]
      Categories (3, interval[float64]): [(0.996, 2.333] < (2.333, 3.667] < (3.667, 5.0]],
      array([0.996     , 2.33333333, 3.66666667, 5.        ]))

precision : 精度,区间边界值保留的小数点位数

# x = [1,2,3,5,3,4,1],  bins = 3, 精度为2
[In ] pd.cut(np.array([1,2,3,5,3,4,1]),3,precision=2)
[Out] [(1.0, 2.33], (1.0, 2.33], (2.33, 3.67], (3.67, 5.0], (2.33, 3.67], (3.67, 5.0], (1.0, 2.33]]
      Categories (3, interval[float64]): [(1.0, 2.33] < (2.33, 3.67] < (3.67, 5.0]]

2、pd.qcut()

基于分位数的离散化功能。 根据等级或基于样本分位数(或者说基于样本值落在区间的频率),将变量分离为相等大小的桶。

参数包含:x, q, labels, retbins, precision, duplicates

  • x、labels、retbins、precision 与 pd.cut() 中参数用法一致;
  • q : 将序列 x 划分为 q 个区间,使落在每个区间的值的数量一致;
  • duplicates :重复值处理,默认为 duplicates = ‘raise’,表示不忽略重复值。如需忽略 x 中的重复值,可指定 duplicates = ‘drop’。

3、pd.cut() v.s. pd.qcut()

  • pd.cut() 将指定序列 x,按指定数量等间距的划分(根据值本身而不是这些值的频率选择均匀分布的bins),或按照指定间距划分
  • pd.qcut() 将指定序列 x,划分为 q 个区间,使落在每个区间的记录数一致
[In] ll = [1,2,3,5,3,4,1,2]
     print('- - - pd.cut()示例1 - - -')
     print(pd.cut(ll, 4, precision=2).value_counts())
     print('- - - pd.cut()示例2 - - -')
     print(pd.cut(ll, [1,2,4], precision=2).value_counts())
     print('- - - pd.qcut()示例 - - -')
     print(pd.qcut(ll, 4, precision=2).value_counts())

[Out] - - - pd.cut()示例1 - - -
     (1.0, 2.0]    4
     (2.0, 3.0]    2
     (3.0, 4.0]    1
     (4.0, 5.0]    1
     dtype: int64
     - - - pd.cut()示例2 - - -
     (1, 2]    2
     (2, 4]    3
     dtype: int64
     - - - pd.qcut()示例 - - -
     (0.99, 1.75]    2
     (1.75, 2.5]     2
     (2.5, 3.25]     2
     (3.25, 5.0]     2
     dtype: int64

到此这篇关于python中pd.cut()与pd.qcut()的对比及示例的文章就介绍到这了,更多相关python pd.cut()与pd.qcut()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Django实现简单分页功能的方法详解
Dec 05 Python
PyQt5每天必学之单行文本框
Apr 19 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
python 插入日期数据到Oracle实例
Mar 02 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python如何编写win程序
Jun 08 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 #Python
python内置模块之上下文管理contextlib
Jun 14 #Python
Python时间操作之pytz模块使用详解
Django框架之路由用法
Jun 10 #Python
深入理解pytorch库的dockerfile
Jun 10 #Python
如何利用python实现列表嵌套字典取值
Jun 10 #Python
python中filter,map,reduce的作用
Jun 10 #Python
You might like
怎样去阅读一份php源代码
2009/08/21 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
python获取网页状态码示例
2014/03/30 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
python之super的使用小结
2018/08/13 Python
python自动化生成IOS的图标
2018/11/13 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
德尔福集团DELPHI的笔试题
2012/02/22 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
总结Python使用过程中的bug
2021/06/18 Python