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 yield使用方法示例
Dec 04 Python
使用cx_freeze把python打包exe示例
Jan 24 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
Python3爬虫学习入门教程
Dec 11 Python
Python实现Linux监控的方法
May 16 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python3中rank函数的用法
Nov 27 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
浅析Python迭代器的高级用法
Jul 16 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
详解python的异常捕获
Mar 03 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
使用adodb lite解决问题
2006/12/31 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
Vue动态实现评分效果
2017/05/24 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
kali中python版本的切换方法
2019/07/11 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
售后服务承诺书
2014/03/26 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
大学生逃课检讨书
2015/05/04 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js