使用pandas实现连续数据的离散化处理方式(分箱操作)

作者:Backcanhave7 时间:2023-08-28 21:45:51 

Python实现连续数据的离散化处理主要基于两个函数,pandas.cut和pandas.qcut,前者根据指定分界点对连续数据进行分箱处理,后者则可以根据指定箱子的数量对连续数据进行等宽分箱处理,所谓等宽指的是每个箱子中的数据量是相同的。

下面简单介绍一下这两个函数的用法:


# 导入pandas包
import pandas as pd
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32] # 待分箱数据
bins = [18, 25, 35, 60, 100] # 指定箱子的分界点

pandas.cut函数 :


cats1 = pd.cut(ages, bins)
cats1

cats1结果:


[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60],
(35, 60], (25, 35]]
Length: 12
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
# labels参数为False时,返回结果中用不同的整数作为箱子的指示符
cats2 = pd.cut(ages, bins,labels=False)
cats2 # 输出结果中的数字对应着不同的箱子

cats2结果:


array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int64)
pd.value_counts(cats1) # 对不同箱子中的数进行计数

计数结果:


(18, 25]  5
(35, 60]  3
(25, 35]  3
(60, 100] 1
dtype: int64
pd.cut(ages, [18, 26, 36, 61, 100], right=False) # 指定分箱区间是左闭右开

改变区间开闭结果:


[[18, 26), [18, 26), [18, 26), [26, 36), [18, 26), ..., [26, 36), [61, 100), [36, 61),
[36, 61), [26, 36)]
Length: 12
Categories (4, interval[int64]): [[18, 26) < [26, 36) < [36, 61) < [61, 100)]
# 可以将想要指定给不同箱子的标签传递给labels参数
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
cuts3 = pd.cut(ages, bins, labels=group_names)
cuts3

cats3结果:


[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult, Senior, MiddleAged,
MiddleAged, YoungAdult]
Length: 12
Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]

pandas.qcut函数:


qcats1 = pd.qcut(ages,q=4) # 参数q指定所分箱子的数量
qcats1

qcats1结果:


[(19.999, 22.75], (19.999, 22.75], (22.75, 29.0], (22.75, 29.0], (19.999, 22.75], ...,
(29.0, 38.0], (38.0, 61.0], (38.0, 61.0], (38.0, 61.0], (29.0, 38.0]]
Length: 12
Categories (4, interval[float64]): [(19.999, 22.75] < (22.75, 29.0] < (29.0, 38.0] <
(38.0, 61.0]]
qcats1.value_counts() # 从输出结果可以看到每个箱子中的数据量时相同的

计数结果:


(19.999, 22.75] 3
(22.75, 29.0]  3
(29.0, 38.0]  3
(38.0, 61.0]  3
dtype: int64

参考:《利用Python进行数据分析》——Wes McKinney 第二版

来源:https://blog.csdn.net/qq_41080850/article/details/88806989

标签:pandas,数据,离散化,分箱
0
投稿

猜你喜欢

  • Python中实现一行拆多行和多行并一行的示例代码

    2021-05-20 12:32:26
  • JS对象数组中如何匹配某个属性值

    2024-04-18 09:39:42
  • Python matplotlib画曲线例题解析

    2022-10-18 14:17:30
  • Python完成哈夫曼树编码过程及原理详解

    2023-10-16 03:09:39
  • [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog

    2024-01-16 23:34:05
  • Django + Taro 前后端分离项目实现企业微信登录功能

    2023-05-31 18:48:46
  • MySQL密码忘了怎么办?MySQL重置root密码方法

    2024-01-23 02:18:30
  • js实现网页标题栏闪烁提示效果实例分析

    2024-04-16 09:05:11
  • golang 各种排序大比拼实例

    2024-05-21 10:18:27
  • js中forEach,for in,for of循环的用法示例小结

    2024-04-29 13:20:16
  • vue指令只能输入正数并且只能输入一个小数点的方法

    2024-06-05 09:20:44
  • Python调试神器之PySnooper的使用教程分享

    2021-12-24 15:37:01
  • 网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法

    2023-08-13 00:26:58
  • 浅谈FastClick 填坑及源码解析

    2024-04-10 16:08:57
  • 带你了解MySQL中的事件调度器EVENT

    2024-01-18 05:55:16
  • python的setattr函数实例用法

    2023-08-17 18:49:59
  • SQL Server数据库于应用程序的关系

    2010-07-26 14:21:00
  • 使用Python进行稳定可靠的文件操作详解

    2022-02-17 04:26:21
  • Entity Framework Core生成列并跟踪列记录

    2023-07-01 07:06:46
  • python如何制作英文字典

    2021-12-01 10:30:00
  • asp之家 网络编程 m.aspxhome.com