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中的filter和lambda函数的使用
Apr 07 Python
Python循环语句中else的用法总结
Sep 11 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python装饰器代替set get方法实例
Dec 19 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Python django中如何使用restful框架
Jun 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
js 目录列举函数
2008/11/06 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
2019/01/22 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python3实现多线程聊天室
2018/12/12 Python
python实现年会抽奖程序
2019/01/22 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
python如何支持并发方法详解
2020/07/25 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
先进个人事迹材料
2014/01/25 职场文书
工程质量月活动方案
2014/02/19 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
校运会口号
2014/06/18 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
个人道歉信大全
2019/04/11 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL