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实现的简单万年历例子分享
Apr 25 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
Python合并多个Excel数据的方法
Jul 16 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
python开发实时可视化仪表盘的示例
May 07 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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源码之 ext/mysql扩展部分
2009/07/17 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
angular.bind使用心得
2015/10/26 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
vue.js的提示组件
2017/03/02 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
电子商务应届生自我鉴定
2014/01/13 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
汽车专业求职信
2014/06/05 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
周末问候语大全
2015/11/10 职场文书
节水宣传标语口号
2015/12/26 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python