pandas——离散化(分组、区间化)

本文介绍了数据预处理中的离散化和one-hot编码技术。离散化通过pandas的cut和qcut函数将连续数据转换为区间,简化数据结构。one-hot编码则用于将分类特征转化为多个二进制列,便于机器学习模型处理。示例展示了如何使用Python对年龄数据进行离散化和one-hot编码操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、离散化

1、为什么要离散化

连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。


2、什么是数据的离散化

连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值


3、离散化操作

通常对于我们不想要连续的数值,我们可将其离散化,离散化也可称为分组、区间化。

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

pandas.qcut函数:是均匀分配,每个区间的样本数相同

import pandas as pd
ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组
se_ages = pd.Series(ages)
bin = [0, 18, 25, 35, 60]  #分组的依据
se1 = pd.qcut(se_ages, q=4, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])
print(se1)

Pandas为我们提供了方便的函数cut():

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
参数解释:

  • x:需要离散化的数组、Series、DataFrame对象
  • bins:分组的依据
  • right:传入False则指定左边为闭端
import pandas as pd
ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组
se_ages = pd.Series(ages)
bin = [0, 18, 25, 35, 60]  #分组的依据
se1 = pd.cut(se_ages, bin)
print(se1)

4、对分组计数

count = pd.value_counts(se1)
print(count)

5、指定左边为闭区间

se2 = pd.cut(se_ages, bin, right=False)
print(se2)

6、为区间指定名称

import pandas as pd
ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组
se_ages = pd.Series(ages)
bin = [0, 18, 25, 35, 60]  #分组的依据
se1 = pd.cut(se_ages, bin, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])
print(se1)

二、one-hot编码

1、什么是one-hot编码

把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。

把下图中左边的表格转化为使用右边形式进行表示:

在这里插入图片描述

2、得出离散化数据的one-hot编码矩阵

pd.get_dummies(data,prefix=None)

  • data:离散化后的数据
  • prefix:分组名字
import pandas as pd
ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组
se_ages = pd.Series(ages)
bin = [0, 18, 25, 35, 60]  #分组的依据
se1 = pd.cut(se_ages, bin, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])
print(se1)

#获得one-hot编码
dummies = pd.get_dummies(se1, prefix=None)
print(dummies)

数据离散化处理是将连续型数据转换为离散型数据的过程,可以将数据划分为若干个区间(也称为“桶”),每个区间内的数据被视为相同的离散值。数据离散化处理通常用于数据挖掘、统计分析等领域。 在 Pandas 中,可以使用 cut() 和 qcut() 函数进行数据离散化处理。 cut() 函数将数据按照指定的区间划分为离散值,可以根据数据的最大值和最小值自动生成等距区间,也可以手动指定区间范围。 例如,下面的代码将一个 DataFrame 中的元素离散化为 5 个区间: ```python import pandas as pd data = pd.DataFrame({'value': [12, 34, 56, 78, 90, 23, 45, 67, 89, 100]}) bins = pd.cut(data['value'], 5) print(bins) ``` 输出结果为: ``` 0 (9.92, 28.8] 1 (28.8, 47.6] 2 (47.6, 66.4] 3 (66.4, 85.2] 4 (85.2, 104.0] 5 (9.92, 28.8] 6 (28.8, 47.6] 7 (47.6, 66.4] 8 (66.4, 85.2] 9 (85.2, 104.0] Name: value, dtype: category Categories (5, interval[float64]): [(9.92, 28.8] < (28.8, 47.6] < (47.6, 66.4] < (66.4, 85.2] < (85.2, 104.0]] ``` qcut() 函数将数据按照指定的分位数划分为离散值,可以根据数据的分布自动生成区间,也可以手动指定分位数。 例如,下面的代码将一个 DataFrame 中的元素离散化为 4 个区间: ```python data = pd.DataFrame({'value': [12, 34, 56, 78, 90, 23, 45, 67, 89, 100]}) bins = pd.qcut(data['value'], 4) print(bins) ``` 输出结果为: ``` 0 (11.999, 34.0] 1 (34.0, 56.0] 2 (56.0, 78.0] 3 (78.0, 100.0] 4 (78.0, 100.0] 5 (11.999, 34.0] 6 (34.0, 56.0] 7 (56.0, 78.0] 8 (78.0, 100.0] 9 (78.0, 100.0] Name: value, dtype: category Categories (4, interval[float64]): [(11.999, 34.0] < (34.0, 56.0] < (56.0, 78.0] < (78.0, 100.0]] ``` 在上面的例子中,cut() 函数和 qcut() 函数都返回了一个 Pandas 的 Categorical 类型的对象,可以通过 value_counts() 方法来统计每个区间内的元素个数。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值