前言


数值数据在数据分析中很常见。 通常,您拥有连续的、非常大的比例或高度偏斜的数值数据。有时,将这些数据分成离散的区间会更容易。 当值被划分为有意义的类别时,这有助于执行描述性统计。例如,我们可以将确切的年龄划分为幼儿、儿童、成人和老年人。
        Pandas 内置的 cut() 函数是将数值数据转换为分类数据的好方法。

参数及解释


pandas.cut(x, bins, right=True, labels=None, retbins=False,\precision=3, include_lowest=False, duplicates='raise', \ordered=True)

x :                          是我们要传入和切分的一维数组,可以是列表,也可以是dataFrame的一列
bins :                     代表切片的方式,可以自定义传入列表[a,b,c],表示按照a-b,b-c的区间来切分,也可以是数值n,直接指定分为n组
right :                    True/False,为True时,表示分组区间是包含右边,不包含左边,即(]; False,代表[)
labels :                   标签参数,比如[低、中、高]
retbins :                 True/False, True返回bin的具体范围值,当bins是单个数值时很有用。(因为bin是数字的话,  划分组具体数值我们是不知道的)
precision :              存储和显示 bin 标签的精度。默认为3
include_lowest :    True/False, 第一个区间是否应该是左包含的
duplicates :            raise/drop, 如果bin列表里有重复,报错/直接删除至保留一个
ordered :                标签是否有序。 适用于返回的类型 Categorical 和 Series(使用 Categorical dtype)。 如果为 True,则将对生成的分类进行排序。 如果为 False,则生成的分类将是无序的(必须提供标签)

各参数:


bin=number

import pandas as pd
df = pd.DataFrame({'age': [2, 67, 40, 32, 4, 15, 82, 99, 26, 30]})
df['age_group'] = pd.cut(df['age'], 3)

这些区间值的开头有一个圆括号,结尾有一个方括号,例如 (1.903, 34.333]。
这基本上意味着圆括号一侧的任何值都不包含在区间中,而包括方括号的一侧(在数学中称为开闭区间)

df['age_group']0     (1.903, 34.333]
1      (66.667, 99.0]
2    (34.333, 66.667]
3     (1.903, 34.333]
4     (1.903, 34.333]
5     (1.903, 34.333]
6      (66.667, 99.0]
7      (66.667, 99.0]
8     (1.903, 34.333]
9     (1.903, 34.333]
Name: age_group, dtype: category
Categories (3, interval[float64, right]): [(1.903, 34.333] < (34.333, 66.667] < (66.667, 99.0]]

显示类型为:category, 3个标签名(1.903, 34.333] 、 (34.333, 66.667] 、 (66.667, 99.0], 这些符号通过"<"来连接,计算方式如下:

interval = (max_value — min_value) / num_of_bins= (99 - 2) / 3= 32.33333        (<--32.3333-->] < (<--32.3333-->] < (<--32.3333-->]        (1.903, 34.333] < (34.333, 66.667] < (66.667, 99.0]

#这里再解释下开区间数值是怎么来的。我们先看下左闭右开,即right=False

pd.cut(df['age'], 3, right=False)0       [2.0, 34.333)
1    [66.667, 99.097)
2    [34.333, 66.667)
3       [2.0, 34.333)
4       [2.0, 34.333)
5       [2.0, 34.333)
6    [66.667, 99.097)
7    [66.667, 99.097)
8       [2.0, 34.333)
9       [2.0, 34.333)
Name: age, dtype: category
Categories (3, interval[float64, left]): [[2.0, 34.333) < [34.333, 66.667) < [66.667, 99.097)]

闭区间所在("[]"),即最小值和最大值。但是开区间是有差异的。
计算方式源代码:${pkg}/pandas/core/reshape/tile.py 第266行

adj = (mx - mn) * 0.001  # 0.1% of the range
if right:                   #左开右闭bins[0] -= adj          #2-(99-2)*0.001 = 1.903
else:                       #左闭右开bins[-1] += adj         #99 + (99-2)*0.001 = 99.097

你...学废了吗?

bin传入指定的列表

df['age_group'] = pd.cut(df['age'], bins=[0, 12, 19, 61, 100])
df['age_group']0      (0, 12]
1    (61, 100]
2     (19, 61]
3     (19, 61]
4      (0, 12]
5     (12, 19]
6    (61, 100]
7    (61, 100]
8     (19, 61]
9     (19, 61]
Name: age_group, dtype: category
Categories (4, interval[int64, right]): [(0, 12] < (12, 19] < (19, 61] < (61, 100]]

此时的左开右闭区间为:(0, 12] < (12, 19] < (19, 61] < (61, 100]

#sort_values
df.sort_values('age_group')

#对每个Categories进行计数
df['age_group'].value_counts().sort_index()(0, 12]      2
(12, 19]     1
(19, 61]     4
(61, 100]    3
Name: age_group, dtype: int64

添加label

bins=[0, 12, 19, 61, 100]
labels=['<12', 'Teen', 'Adult', 'Older']df = pd.DataFrame({'age': [2, 67, 40, 32, 4, 15, 82, 99, 26, 30]})
df['age_group'] = pd.cut(df['age'], bins, labels=labels)
#这时候age_group不再是显示一个区间了,而是具体的标签了
#sort
#df['age_group'].value_counts().sort_index()

include_lowest

假设将上述年龄值划分为 2-12、12-19、19-60、61-100。
将bin设置为 [2, 12, 19, 61, 100] 时,第一个数字将不包含在内,将得到包含 NaN 的结果。

df['age_group'] = pd.cut(df['age'], bins=[2, 12, 19, 61, 100],\include_lowest=True)

当然,我们也可以为bin传入IntervalIndex

bins = pd.IntervalIndex.from_tuples([(0, 12), (19, 61), (61, 100)])
bins

输出:
IntervalIndex([(0, 12], (19, 61], (61, 100]], dtype='interval[int64, right]')

df['age_group'] = pd.cut(df['age'], bins)
df
#从而可以将我们不需要的部分删除掉,或者做其他处理

返回bins
使用retbins=True将生成的bins返回

result, bins = pd.cut(df['age'], bins=4,            # A single number valueretbins=True
)

pandas-cut 函数相关推荐

  1. pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决

    pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...

  2. Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】

    文章目录 重命名轴索引 离散化连续数据 哑变量处理类别型数据 重命名轴索引 rename( self, mapper: Optional[Renamer] = None, *, index: Opti ...

  3. pandas 常用函数整理

    pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...

  4. python cut函数_Pandas DataFrame.cut()用法例子

    本文概述 当需要将数据值分段并将其分类到bin中时, 将调用cut()方法.它用于将连续变量转换为分类变量.它还可以将元素数组分离到单独的容器中.该方法仅适用于一维数组状对象. 如果我们有大量标量数据 ...

  5. python cut函数_基于python cut和qcut的用法及区别详解

    我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...

  6. blankcount函数python,Python pandas常用函数详解

    本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名, ...

  7. 数据分析工具Pandas(4):Pandas的函数应用

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  8. R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)

    R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能) 目录 R语言计算dataframe数据列中各分类的计数(类似pandas value

  9. R语言cut函数实现数据分箱及因子化实战

    R语言cut函数实现数据分箱及因子化实战 目录 R语言cut函数实现数据分箱及因子化实战 #基本语法 #cut函数数值分箱

  10. pandas常用函数说明及速查表

    pandas常用函数说明及速查表 如果你用python做开发,那么几乎肯定会使用pandas库. Pandas 是 Python 语言的一个扩展程序库,用于数据分析. Pandas 是一个开放源码.B ...

最新文章

  1. 洛谷P1092 虫食算
  2. 急速JavaScript全栈教程
  3. android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表
  4. 签证计算机专业敏感吗,签证中最常见被check的14个敏感专业
  5. vfp 中调用硬盘_硬盘你真的选对了么?固态真的好用么?细数硬盘这些年出现的坑!...
  6. bootice添加黑苹果引导_2019款小米air12.5完美黑苹果10.15.6macOS CatalinaEFI
  7. 如何用微信建立打卡小程序(做打卡签到小程序方法)
  8. 探索性测试方法讲解之一
  9. SPF算法简单解析过程
  10. 遥感影像的特征空间图
  11. Sending the email to the following server failed.IOException while sending message问题解决
  12. linux达人养成计划i,Linux达人养成计划 I
  13. C++ Primer读书笔记(从后向前看)
  14. mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
  15. cdh6.1,cdh6.2 hue sqoop组件提交异常
  16. BOA 服务器从-1000开始学习(博客搬运工)
  17. VS2013 ocx去除安全警告
  18. 如何通过域名直接访问你的网站
  19. 关于asm(” RPT #N || NOP”)
  20. 开源Linux、Windows服务器数据备份工具选型分析(一) UrBackup

热门文章

  1. Emmet语法及使用介绍
  2. 元年洞察|如何打造企业数据能力组件中心
  3. 计算机专业可以考事业单位a类吗,事业单位A类考什么?
  4. [转帖][转载]项目经理必备工具包:项目管理中的22个思维导图
  5. K8s 集群使用 ConfigMap 优雅加载 Spring Boot 配置文件
  6. ArcSDE的安装步骤
  7. 【能效分析】安科瑞变电所运维云平台解决方案应用分析
  8. 金融风暴、老板已逃!我应该怎么办?
  9. powerdesigner 修改字段类型
  10. Glid简单使用(一)