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深入学习之对象的属性
Aug 31 Python
Python Tkinter基础控件用法
Sep 03 Python
用python 制作图片转pdf工具
Jan 30 Python
Django如何实现内容缓存示例详解
Sep 24 Python
python列表生成式与列表生成器的使用
Feb 23 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
Python绘制热力图示例
Sep 27 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python操作Excel把数据分给sheet
May 20 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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
关于文本留言本的分页代码
2006/10/09 PHP
header()函数使用说明
2006/11/23 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
理解javascript闭包
2015/12/15 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
python实现上传下载文件功能
2020/11/19 Python
python3实现逐字输出的方法
2019/01/23 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
PyQt5实现登录页面
2020/05/30 Python
python使用列表的最佳方案
2020/08/12 Python
python如何设置静态变量
2020/09/07 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
C语言开发工程师测试题
2016/12/20 面试题
数学教研活动总结
2014/07/02 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
经典爱情感言
2015/08/03 职场文书
入门学习Go的基本语法
2021/07/07 Golang
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA