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的Django框架测试驱动开发的教程
Apr 22 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
python输入多行字符串的方法总结
Jul 02 Python
python Django 创建应用过程图示详解
Jul 29 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
浅谈Python __init__.py的作用
Oct 28 Python
python中二分查找法的实现方法
Dec 06 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/07/17 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
angular 服务随记小结
2019/05/06 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
Vue computed 计算属性代码实例
2020/04/22 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
Python元字符的用法实例解析
2018/01/17 Python
python3判断url链接是否为404的方法
2018/08/10 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
竞选演讲稿范文
2013/12/28 职场文书
大一新生期末自我评价
2014/09/12 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
Python+Tkinter制作专属图形化界面
2022/04/01 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android