pandas-cut 函数
前言
数值数据在数据分析中很常见。 通常,您拥有连续的、非常大的比例或高度偏斜的数值数据。有时,将这些数据分成离散的区间会更容易。 当值被划分为有意义的类别时,这有助于执行描述性统计。例如,我们可以将确切的年龄划分为幼儿、儿童、成人和老年人。
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 函数相关推荐
- pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决
pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...
- Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】
文章目录 重命名轴索引 离散化连续数据 哑变量处理类别型数据 重命名轴索引 rename( self, mapper: Optional[Renamer] = None, *, index: Opti ...
- pandas 常用函数整理
pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...
- python cut函数_Pandas DataFrame.cut()用法例子
本文概述 当需要将数据值分段并将其分类到bin中时, 将调用cut()方法.它用于将连续变量转换为分类变量.它还可以将元素数组分离到单独的容器中.该方法仅适用于一维数组状对象. 如果我们有大量标量数据 ...
- python cut函数_基于python cut和qcut的用法及区别详解
我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...
- blankcount函数python,Python pandas常用函数详解
本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名, ...
- 数据分析工具Pandas(4):Pandas的函数应用
数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...
- R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)
R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能) 目录 R语言计算dataframe数据列中各分类的计数(类似pandas value
- R语言cut函数实现数据分箱及因子化实战
R语言cut函数实现数据分箱及因子化实战 目录 R语言cut函数实现数据分箱及因子化实战 #基本语法 #cut函数数值分箱
- pandas常用函数说明及速查表
pandas常用函数说明及速查表 如果你用python做开发,那么几乎肯定会使用pandas库. Pandas 是 Python 语言的一个扩展程序库,用于数据分析. Pandas 是一个开放源码.B ...
最新文章
- 洛谷P1092 虫食算
- 急速JavaScript全栈教程
- android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表
- 签证计算机专业敏感吗,签证中最常见被check的14个敏感专业
- vfp 中调用硬盘_硬盘你真的选对了么?固态真的好用么?细数硬盘这些年出现的坑!...
- bootice添加黑苹果引导_2019款小米air12.5完美黑苹果10.15.6macOS CatalinaEFI
- 如何用微信建立打卡小程序(做打卡签到小程序方法)
- 探索性测试方法讲解之一
- SPF算法简单解析过程
- 遥感影像的特征空间图
- Sending the email to the following server failed.IOException while sending message问题解决
- linux达人养成计划i,Linux达人养成计划 I
- C++ Primer读书笔记(从后向前看)
- mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
- cdh6.1,cdh6.2 hue sqoop组件提交异常
- BOA 服务器从-1000开始学习(博客搬运工)
- VS2013 ocx去除安全警告
- 如何通过域名直接访问你的网站
- 关于asm(” RPT #N || NOP”)
- 开源Linux、Windows服务器数据备份工具选型分析(一) UrBackup