本文介绍: 分箱是一种常见的数据预处理技术,有时也被称为分桶离散化,可用于将连续数据间隔分组到“箱”或“桶”中。在本文中将介绍如何使用 Python的Pandas库中的4种方法数值进行分箱。首先,创建示例数据框上面数据表示1000名学生的0到100分的考试分数。而我们任务是将数字分数分为值“A”、“B”和“C”的等级,其中“A”是最好的,“C”是最差的。

分箱是一种常见的数据预处理技术,有时也被称为
分桶
离散,可用于将连续数据间隔分组到“箱”或“桶”中。在本文中将介绍如何使用 Python的Pandas库中的4种方法数值进行分箱。

首先,创建示例数据

import pandas as pd
import numpy as np

def create_df():
  df = pd.DataFrame({'score': np.random.randint(0,101,1000)})
  return df

df = create_df()
df.head()

df
上面数据表示1000名学生的0到100分的考试分数。而我们任务是将数字分数分为值“A”、“B”和“C”的等级,其中“A”是最好的,“C”是最差的。

方法1:between & loc

Pandas.between方法返回一个包含True的布尔向量用来对应的Series元素位于边界值leftright之间。其中有三个参数

  • left:左边界
  • right:右边界
  • inclusive:要包括哪个边界。可接受的值为 {“both”、“neither”、“left”、“right”}。

我们根据以下间隔规则学生的分数分为等级

  • A: (80, 100]
  • B: (50, 80]
  • C: [0, 50]

其中方括号[和圆括号)分别表示边界值是包含的和不包含的。我们需要确定哪个分数在感兴趣区间之间,并为其分配相应的等级值。注意看下面的不同的参数表示是否包含边界

df.loc[df['score'].between(0, 50, 'both'), 'grade'] = 'C'
df.loc[df['score'].between(50, 80, 'right'), 'grade'] = 'B'
df.loc[df['score'].between(80, 100, 'right'), 'grade'] = 'A'
df.head()

between
以下是每个分数区间的人数统计
value_counts
注意:此方法需要为每个bin编写处理代码,因此它仅适用于bin很少的情况

方法2:cut

使用cut可以将值分类为离散的间隔。此函数对于从连续变量到分类变量很有用。cut参数如下:

代码如下:

bins = [0, 50, 80, 100]
labels = ['C', 'B', 'A']
df['grade'] = pd.cut(x = df['score'], bins = bins, labels = labels, include_lowest = True)
df.head()

cut
这样就创建一个包bin边界值的bins列表一个包含相应bin标签标签列表
查看每个区段的人数:
value_counts

方法3:qcut

qcut可以根据排名或基于样本分位数变量离散为大小相等的桶。qcut的参数如下:

在前两个示例中,为每个级别定义了分数间隔,这里使得每个级别学生数量不均匀。在下面的示例中,将尝试学生分类为3个具有相等(大约)数量的分数等级示例中有1000名学生,因此每个分箱应该有大约333名学生。

df['grade'],cut_bin = pd.qcut(df['score'], q=3, labels=['C', 'B', 'A'], retbins=True)
df.head()

pcut
如果retbins设置为 True, 则会返回 bin 边界:
retbins
可以看到分数间隔如下:

  • C:[0, 36]
  • B:(36, 68]
  • A:(68, 100]

再次使用.value_counts()检查每个等级有多少学生。理想情况下,每个应该有大约 333 名学生。
value_counts

方法4:value_counts

虽然 pandas.value_counts通常用于计算系列唯一值的数量,但它也可用于使用bins参数将值分组到半开箱中。
半开箱
需要强调的是:

可以通过传入边界列表定义bin边界:
传入边界
这里输出结果与方法1和2的结果相同。

补充材料

  1. https://colab.research.google.com/drive/1yWTl2OzOnxG0jCdmeIN8nV1MoX3KQQ_1?usp=sharing

原文地址:https://blog.csdn.net/ARPOSPF/article/details/129664845

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12245.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注