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算法学习之基数排序实例
Dec 18 Python
python基础教程之匿名函数lambda
Jan 17 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Python应用领域和就业形势分析总结
May 14 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
python2 对excel表格操作完整示例
Feb 23 Python
python如何调用字典的key
May 25 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
如何利用Python 进行边缘检测
Oct 14 Python
python 中的jieba分词库
Nov 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php提高网站效率的技巧
2015/09/29 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP 类与构造函数解析
2017/02/06 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
python获取糗百图片代码实例
2013/12/18 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
python实现大转盘抽奖效果
2019/01/22 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python中itertools的用法详解
2020/02/07 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
离婚撤诉申请书范本
2015/05/18 职场文书
红色革命电影观后感
2015/06/18 职场文书
2015团员个人年度总结
2015/11/24 职场文书
JS数组去重详情
2021/11/07 Javascript
Tomcat用户管理的优化配置详解
2022/03/31 Servers
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA