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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
用Python写一个无界面的2048小游戏
May 24 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
python虚拟环境完美部署教程
Aug 06 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
Python实现word2Vec model过程解析
Dec 16 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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 at(@)符号的用法简介
2009/07/11 PHP
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
介绍下Java的输入输出流
2014/01/22 面试题
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
电子技术专业中专生的自我评价
2013/12/17 职场文书
自我介绍演讲稿
2014/01/15 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
社保委托书怎么写
2014/08/02 职场文书
社区助残日活动总结
2014/08/29 职场文书
婚前协议书范本两则
2014/10/16 职场文书
商务代表岗位职责
2015/02/15 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
感恩教育观后感
2015/06/17 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
Java对文件的读写操作方法
2022/04/29 Java/Android