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的mysql数据库的更新如何实现
Jul 31 Python
python如何实现内容写在图片上
Mar 23 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
Python实现全排列的打印
Aug 18 Python
Django csrf 验证问题的实现
Oct 09 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
python根据多个文件名批量查找文件
Aug 13 Python
解析python的局部变量和全局变量
Aug 15 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python+openCV对视频进行截取的实现
Nov 27 Python
Python如何识别银行卡卡号?
Jun 10 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 Socket写的POP3类
2013/10/30 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
vue组件实例解析
2017/01/10 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python获取代码运行时间的实例代码
2018/06/11 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
学校安全工作制度
2014/01/19 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
《长相思》听课反思
2014/04/10 职场文书
五心教育心得体会
2014/09/04 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
JavaScript 实现页面滚动动画
2021/04/24 Javascript
Python学习之包与模块详解
2022/03/19 Python
vue elementUI表格控制对应列
2022/04/13 Vue.js