cut( )用来把一组数据分割成离散的区间。

cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
# x:被切分的数据,必须是一维的
# bins:①int型整数:将x按照数值大小平均分成分成bins份,x的范围在最左侧和最右侧分别扩展0.1%以包括最大值和最小值
     #②标量序列:自定义分组的每个区间,此时严格按照给定的区间分割,x最左和最右不扩展
     #③pandas.IntervalIndex
# right:布尔值,默认为True,表示分割后包含区间右侧值不包含左侧值,False表示分割后包含左侧值不包括右侧值
# labels:分组后bins的标签,默认为None显示分割后属于的区间
# retbins:返回结果中是否包括bins,一般bins参数使用整数时
# precision:保留的小数点位数,默认为3
# include_lowest:如果自定义标量序列分组,第一个区间是否包含左侧最小值
# duplicates:是否允许区间重复

bins设置为整数,将一维数组平均分为5份

arr = np.array([1,77,10,89,36,12,58,62,5,40,32,18,20,25,30,100])
c = pd.cut(arr,5,precision=1)
print(c)
# [(0.9, 20.8], (60.4, 80.2], (0.9, 20.8], (80.2, 100.0], (20.8, 40.6], ..., (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], (80.2, 100.0]]
# Length: 16
# Categories (5, interval[float64]): [(0.9, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]]

系统自动根据数组中数值的大小将原数据平均分为5分,每个区间间隔为19.8。整个区间的起点为(1,100],由于右侧包含了100因此最大区间的最大值无需扩展,而由于不包括1,因此最小区间的最小值需向左扩展0.1% * 100 = 0.1,即1-0.1 = 0.9。

设置retbins=True,会将分割区间以数组形式显示出来,这个参数一般在bins设置为整数时使用,因为其他bins两种方式都是自定义了这个区间。

arr = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32])
c = pd.cut(arr,5,precision=1,retbins = True)
print(c)
# ([(0.9, 20.8], (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], ..., (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], (20.8, 40.6]]
# Length: 16
# Categories (5, interval[float64]): [(0.9, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]], \
# array([ 0.901, 20.8 , 40.6 , 60.4 , 80.2 , 100. ]))

bins自定义分组序列,并指定lables

c = pd.cut(arr,bins = [1,5,18,35,50,100],labels = ['幼儿','少年','青年','中年','老年'],precision=1)
print(c)
# [NaN, 老年, 少年, 老年, 中年, ..., 少年, 青年, 青年, 青年, 老年]
# Length: 16
# Categories (5, object): [幼儿 < 少年 < 青年 < 中年 < 老年]

上述示例的意思是,将原数组按照1-5、5-18、18-35、35-50、50-100(左开右闭)的区间进行划分,划分后分别对应幼儿、少年、青年、中年、老年。

但是由于默认为左开区间所以无法将最小值划到一个给定的区间(如果设置right=False则最大值无对应区间),因此原数组中的第一个数1返回的是NaN,可以设置参数include_lowest=True,则可将最小是包含进去。

c = pd.cut(arr,bins = [1,5,18,35,50,100],labels = ['幼儿','少年','青年','中年','老年'],precision=1,include_lowest=True)
print(c)
# [幼儿, 老年, 少年, 老年, 中年, ..., 少年, 青年, 青年, 青年, 老年]
# Length: 16
# Categories (5, object): [幼儿 < 少年 < 青年 < 中年 < 老年]

上述例子的返回结果包含三项,第一项是每个数属于哪个区间,第二个是原数组长度,第三个是Category对象

如果只想显示第一项、即数组中的每个值属于哪个区间,可设置为labels = False

c= pd.cut(arr,bins = [1,5,18,35,50,100],labels=False,include_lowest=True)
print(c)
# [0 0 1 3 3 1 4 4 4 4 4 1 2 2 2 2]

pandas之cut的更多相关文章

  1. pandas之cut(),qcut()

    功能:将数据进行离散化 可参见博客:https://blog.csdn.net/missyougoon/article/details/83986511 , 例子简易好懂 1.pd.cut函数有7个参 ...

  2. 数据处理:12个使得效率倍增的pandas技巧

    数据处理:12个使得效率倍增的pandas技巧 1. 背景描述 Python正迅速成为数据科学家偏爱的语言,这合情合理.它拥有作为一种编程语言广阔的生态环境以及众多优秀的科学计算库.如果你刚开始学习P ...

  3. pandas的离散化,面元划分

    pd.cut pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=, include_lowest=False) ...

  4. pandas 初识(三)

    Python Pandas 空值 pandas 判断指定列是否(全部)为NaN(空值) import pandas as pd import numpy as np df = pd.DataFrame ...

  5. 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...

  6. Pandas进阶之提升运行效率

    前言 如果你现在正在学习数据分析,或者正在从事数据分析行业,肯定会处理一些大数据集.pandas就是这些大数据集的一个很好的处理工具.那么pandas到底是什么呢?官方文档上说: " 快速, ...

  7. pandas优化

    目录 前言 使用Datetime数据节省时间 pandas数据的循环操作 使用itertuples() 和iterrows() 循环 Pandas的 .apply()方法 矢量化操作:使用.isin( ...

  8. 《利用Python进行数据分析》第7章学习笔记

    数据规整化:清理.转换.合并.重塑 合并数据集 pandas.merge pandas.concat combine_first 数据库风格的DataFrame合并 索引上的合并 join()实例方法 ...

  9. Python之数据规整化:清理、转换、合并、重塑

    Python之数据规整化:清理.转换.合并.重塑 1. 合并数据集 pandas.merge可根据一个或者多个不同DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象 ...

随机推荐

  1. Executors框架之ScheduledExecutorService实现定时任务

    一.简介 An ExecutorService that can schedule commands to run after a given delay, or to execute periodi ...

  2. node+ajax实战案例(3)

    3.用户注册实现 3.1.注册用户功能的实现逻辑 1 用户在表单上输入注册信息 2 点击注册后,收集用户在表单上输入的注册信息并且发送给后台 3 后台接收用户发送过来的注册信息 4 后台需要处理数据并 ...

  3. Format中的转换说明符

    %a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99)%c 单个字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 指数形式的浮点数[e-(E-)记数法]%g ...

  4. P2136 拉近距离

    我也想有这样的爱情故事,可惜我单身 其实这道题就是一个比较裸的最短路问题.对于一个三元组 (S,W,T) ,S其实就是一个端点,而W就是到达的端点,连接两个端点的边长为-T,注意要取一个相反数,这样才 ...

  5. 资深前端工程师带你认识网页后缀html、htm、shtml、shtm有什么区别?

    每一个网页或者说是web页都有其固定的后缀名,不同的后缀名对应着不同的文件格式和不同的规则.协议.用法,最常见的web页的后缀名是.html和.htm,但这只是web页最基本的两种文件格式,今天我们来 ...

  6. css/html 空格,html空格符的显示、标示方式【html空格代码】

    在html里面空格的话,你直接敲打出来的空格是不可以的,下面将通过html和css中设置显示空格的实现总结: Html中空格 符号 编号 描述      不断行的空白(1个字符宽度), 不换行空格 全 ...

  7. Navicat远程连接MySQL 提示1045 - Access denied for user 'root'@'223.74.158.192'(using password:YES)

    问题: 今天在自己的阿里云服务器上(Window Server2012 R2)安装了一个MySQL5.7.26,在阿里云服务器中通过本地链接是正常的,但是当在自己的电脑上使用Navicat连接是提示: ...

  8. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

  9. windows jenkins下配置sonar-scanner

    windows jenkins下配置sonar-scanner 一.基本配置信息 ① jenkins版本:2.222.4 ② sonarqube scanner版本:4.4.0.2170 ③ 操作系统 ...

  10. Windows系统appium移动端自动化真机环境搭建

    appium-windows-android环境搭建完成以后,就可以进行真机模式下的appium环境搭建啦!! 准备:把要测试的app下载至本机(小波的是把apk放在桌面上,例如:C:\Users\w ...