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调用短信猫控件实现发短信功能实例
Jul 04 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
对Python中内置异常层次结构详解
Oct 18 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
详解Python 循环嵌套
Jul 09 Python
python使用建议技巧分享(三)
Aug 18 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
Python echarts实现数据可视化实例详解
Mar 03 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发送AT指令实例代码
2016/05/26 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python list操作用法总结
2015/11/10 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Python新手学习标准库模块命名
2020/05/29 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
商业活动邀请函
2014/02/04 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
家长对孩子的评语
2014/04/18 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
教师党员整改措施
2014/10/24 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
技能培训通讯稿
2015/07/18 职场文书
Oracle中日期的使用方法实例
2022/07/07 Oracle