pandas等距分箱,

  pandas等距分箱,

  分箱是一种常见的数据预处理技术,有时也称为分桶或离散化。它可用于将连续数据的间隔分组到“盒子”或“桶”中。本文将使用pythonPandas库对数值进行装箱的四种方法。有兴趣的可以看看。

  00-1010前言1,在loc2,cut3,qcut4,value_counts之间

  

目录

 

  使用熊猫的between、cut、qcut和value_count离散化数值变量。

  分箱是一种常见的数据预处理技术,有时也称为分桶或离散化。它可用于将连续数据的间隔分组到“盒子”或“桶”中。在本文中,我们将讨论使用python熊猫库的宁滨数值的四种方法。

  我们为演示创建了以下合成数据。

  importpandasaspd #版本1.3.5

  importnumpyasnp

  defcreate_df():

  df=pd。data frame({ score : NP . random . randint(0,101,1000)})

  returndf

  create_df()

  df.head()

  数据包括1000名学生0到100分的考试成绩。这次的任务是将数值分数分为数值为“A”、“B”、“C”的等级,其中“A”为最好等级,“C”为最差等级。

  

前言

 

  panda.between方法返回一个包含True的布尔向量,对应的Series元素位于边界值左右之间。

  有以下三个参数:

  左:左边界右:右边界包括:要包括哪个边界。可接受的值为{ "两者"、"两者"、"左"和"右" }。学生的成绩根据以下区间规则进行评分:

  A: (80,100) B: (50,80) C: [0,50]其中方括号[和括号]分别表示包括和不包括边界值。我们需要确定哪个分数在感兴趣的区间之间,并给它分配一个相应的等级值。请注意,以下不同的参数指示是否包括边界。

  df.loc[df[score]。介于(0,50,两者),等级]=C

  df.loc[df[score]。介于(50,80,右),等级]=B 之间

  df.loc[df[score]。介于(80,100,右),等级]=A 之间

  以下是每个分数范围内的人数:

  df.grade.value_counts()

  C 488

  B 310

  一个202

  名称:等级,数据类型: int64

  这种方法需要为每个bin编写处理代码,所以只适用于bin很少的情况。

  

1、between loc

 

  您可以使用cut将值分类为离散的区间。这个函数对于连续变量到分类变量也很有用。

  切割参数如下:

  x:要入库的数组。必须是一维的。箱:标量序列:定义允许非均匀宽度的箱边缘。标签:指定返回的容器的标签。必须与上述bin参数的长度相同。Include_lowest: (bool)第一个间隔是否应保持包含。bin=[0,50,

   80, 100] 

  labels = [C, B, A] 

  df[grade] = pd.cut(x = df[score], 

                        bins = bins, 

                        labels = labels, 

                        include_lowest = True)

  

  这样就创建一个包含 bin 边界值的 bins 列表和一个包含相应 bin 标签的标签列表。

  

 

  查看每个区段的人数

  

df.grade.value_counts()

 

  

C 488
B 310
A 202
Name: grade, dtype: int64

 

  

 

  结果与上面示例相同。

  

 

  

3、qcut

 

  qcut可以根据排名或基于样本分位数将变量离散为大小相等的桶[3]。

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

  qcut参数:

  

  • x:要分箱的输入数组。必须是一维的。

  • q:分位数。10 表示十分位数,4 表示四分位数等。也可以是交替排列的分位数,例如[0, .25, .5, .75, 1.] 四分位数。

  • labels:指定 bin 的标签。必须与生成的 bin 长度相同。

  • retbins: (bool) 是否返回 (bins, labels)。

 

  

df[grade], cut_bin = pd.qcut(df[score],

 

  

 

  

print (cut_bin)

 

  分数间隔如下:

  

  • C:[0, 36]

  • B:(36, 68]

  • A:(68, 100]

 

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

  

df.grade.value_counts()

 

  

C 340
A 331
B 329
Name: grade, dtype: int64

 

  

 

  

 

  

4、value_counts

 

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

  

df[score].value_counts(bins = 3, sort = False)

 

  默认情况下, .value_counts 按值的降序对返回的系列进行排序。将 sort 设置为 False 以按其索引的升序对系列进行排序。

  

(-0.101, 33.333] 310

 

  series 索引是指每个 bin 的区间范围,其中方括号 [ 和圆括号 ) 分别表示边界值是包含的和不包含的。返回series 的值表示每个 bin 中有多少条记录。

  与 .qcut 不同,每个 bin 中的记录数不一定相同(大约)。.value_counts 不会将相同数量的记录分配到相同的类别中,而是根据最高和最低分数将分数范围分成 3 个相等的部分。分数的最小值为 0,最大值为 100,因此这 3 个部分中的每一个都大约在 33.33 范围内。这也解释了为什么 bin 的边界是 33.33 的倍数。

  我们还可以通过传入边界列表来定义 bin 边界。

  

df[score].value_counts(bins = [0,50,80,100], sort = False)

 

  

(-0.001, 50.0] 488
(50.0, 80.0] 310
(80.0, 100.0] 202
Name: score, dtype: int64

 

  

 

  这给了我们与示例 1 和 2 相同的结果。

  以上就是Pandas对数值进行分箱操作的4种方法总结的详细内容,更多关于Pandas数值分箱的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: