pandas.cut具体使用总结


Posted in Python onJune 24, 2019

用途

pandas.cut用来把一组数据分割成离散的区间。比如有一组年龄数据,可以使用pandas.cut将年龄数据分割成不同的年龄段并打上标签。

原型

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

参数含义

x:被切分的类数组(array-like)数据,必须是1维的(不能用DataFrame);

bins:bins是被切割后的区间(或者叫“桶”、“箱”、“面元”),有3中形式:一个int型的标量、标量序列(数组)或者pandas.IntervalIndex 。

一个int型的标量

 当bins为一个int型的标量时,代表将x平分成bins份。x的范围在每侧扩展0.1%,以包括x的最大值和最小值。

标量序列

 标量序列定义了被分割后每一个bin的区间边缘,此时x没有扩展。

pandas.IntervalIndex

定义要使用的精确区间。

right:bool型参数,默认为True,表示是否包含区间右部。比如如果bins=[1,2,3],right=True,则区间为(1,2],(2,3];right=False,则区间为(1,2),(2,3)。

labels:给分割后的bins打标签,比如把年龄x分割成年龄段bins后,可以给年龄段打上诸如青年、中年的标签。labels的长度必须和划分后的区间长度相等,比如bins=[1,2,3],划分后有2个区间(1,2],(2,3],则labels的长度必须为2。如果指定

labels=False,则返回x中的数据在第几个bin中(从0开始)。

retbins:bool型的参数,表示是否将分割后的bins返回,当bins为一个int型的标量时比较有用,这样可以得到划分后的区间,默认为False。

precision:保留区间小数点的位数,默认为3.

include_lowest:bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)。

duplicates:是否允许重复区间。有两种选择:raise:不允许,drop:允许。

返回值

out:一个pandas.Categorical, Series或者ndarray类型的值,代表分区后x中的每个值在哪个bin(区间)中,如果指定了labels,则返回对应的label。

bins:分隔后的区间,当指定retbins为True时返回。

例子

这里拿给年龄分组当做例子。

import numpy as np
import pandas as pd

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据

将ages平分成5个区间

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) 
pd.cut(ages, 5)

输出:

[(0.901, 20.8], (0.901, 20.8], (0.901, 20.8], (20.8, 40.6], (20.8, 40.6], ..., (0.901, 20.8], (0.901, 20.8], (20.8, 40.6], (20.8, 40.6], (20.8, 40.6]]
Length: 16
Categories (5, interval[float64]): [(0.901, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]]

可以看到ages被平分成5个区间,且区间两边都有扩展以包含最大值和最小值。

将ages平分成5个区间并指定labels

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
pd.cut(ages, 5, labels=[u"婴儿",u"青年",u"中年",u"壮年",u"老年"])

输出:

[婴儿, 婴儿, 婴儿, 青年, 青年, ..., 婴儿, 婴儿, 青年, 青年, 青年]
Length: 16
Categories (5, object): [婴儿 < 青年 < 中年 < 壮年 < 老年]

给ages指定区间进行分割

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
pd.cut(ages, [0,5,20,30,50,100], labels=[u"婴儿",u"青年",u"中年",u"壮年",u"老年"])

输出:

[婴儿, 婴儿, 青年, 壮年, 壮年, ..., 青年, 青年, 中年, 中年, 壮年]
Length: 16
Categories (5, object): [婴儿 < 青年 < 中年 < 壮年 < 老年]

这里不再平分ages,而是将ages分为了5个区间(0, 5],(5, 20],(20, 30],(30,50],(50,100].

返回分割后的bins

令retbins=True即可

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
pd.cut(ages, [0,5,20,30,50,100], labels=[u"婴儿",u"青年",u"中年",u"壮年",u"老年"],retbins=True)

输出:

([婴儿, 婴儿, 青年, 壮年, 壮年, ..., 青年, 青年, 中年, 中年, 壮年]
 Length: 16
 Categories (5, object): [婴儿 < 青年 < 中年 < 壮年 < 老年],
 array([  0,   5,  20,  30,  50, 100]))

只返回x中的数据在哪个bin

令labels=False即可

ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
pd.cut(ages, [0,5,20,30,50,100], labels=False)

输出:

array([0, 0, 1, 3, 3, 1, 4, 4, 4, 4, 4, 1, 1, 2, 2, 3], dtype=int64)

第一个0表示1在第0个bin中。

参考

1.https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.cut.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之dict()的操作方法
Sep 24 Python
Python功能键的读取方法
May 28 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
详解Python3注释知识点
Feb 19 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
详解Python绘图Turtle库
Oct 12 Python
pytorch的batch normalize使用详解
Jan 15 Python
django中的数据库迁移的实现
Mar 16 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 #Python
python日期相关操作实例小结
Jun 24 #Python
使用Python Pandas处理亿级数据的方法
Jun 24 #Python
Python3批量生成带logo的二维码方法
Jun 24 #Python
解决python文件双击运行秒退的问题
Jun 24 #Python
对python中的控制条件、循环和跳出详解
Jun 24 #Python
django框架自定义模板标签(template tag)操作示例
Jun 24 #Python
You might like
PHP 存储文本换行实现方法
2010/01/05 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php include类文件超时问题处理
2015/02/06 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
工商企业管理应届生求职信
2014/05/04 职场文书
2015年司法局工作总结
2015/05/22 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python