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的package机制如何简化utils包设计详解
Dec 11 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python文字转语音实现过程解析
Nov 12 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
python 操作hive pyhs2方式
Dec 21 Python
信号生成及DFT的python实现方式
Feb 25 Python
jupyter notebook 重装教程
Apr 16 Python
golang/python实现归并排序实例代码
Aug 30 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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不用正则采集速度探究总结
2008/03/24 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
详谈js模块化规范
2017/07/07 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
vue实现带复选框的树形菜单
2019/05/27 Javascript
Python实现的简单hangman游戏实例
2015/06/28 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Django密码存储策略分析
2020/01/09 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
司机的工作范围及职责
2013/11/13 职场文书
怀念母亲教学反思
2014/04/28 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
会计入职心得体会
2016/01/22 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby