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. vue全家桶(3.1)

    4.数据请求 4.1.axios是什么? axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有以下特征: 从浏览器中创建 XMLHttpRequest 从 no ...

  2. 代码块&&API(object、String、StringBuffer、StringBuilder)

    day 07 代码块 局部代码块 定义在方法中,用户划分区域的 构造代码块 和成员方法并列,用{}包裹 每次创建对象的时候都会执行,优先于构造方法 静态代码块 构造代码块前面用static声明 在同类 ...

  3. 【error fixed】E: Package 'oracle-java8-installer' has no installation candidate

    问题:安装oracle-java8-installer按照如下指南失败: How To Install Java with Apt-Get on Ubuntu 16.04[https://www.di ...

  4. (私人收藏)PPT数据图表

    PPT数据图表 https://pan.baidu.com/s/1lXt8UU20IotD4LLagfTTXAkknf

  5. 每日一题 - 剑指 Offer 32 - II. 从上到下打印二叉树 II

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag: 队列 BFS 难易程度:简单 题目描述: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 示 ...

  6. yml配置基本使用

    1.yml 基本知识 1.1 常识 基本结构 k: v 的结构 注意:冒号和v之间必须有空格,否则会出现问题: 大小写敏感 1.2 v 多种写法 看一下下面的这个例子: # rabbitmq 初始化配 ...

  7. Spreading the Wealth,思维

    题目去洛谷 题意: 很清晰,n个人,每人有一些硬币硬币总数sum≡0(mod n),通过一些互相交换,使硬币数平均(即每人有相同个数的硬币) 分析: 还是有点思维含量的,我们这样想,我们其实就是要确定 ...

  8. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作

    相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...

  9. 利用SignalR实施响应股票数据波动

    1.新建ASP.NET Web应用程序,  选择Empty模板. 2.创建Stock.cs类 public class Stock { /// <summary> /// 价格 /// & ...

  10. python中pymysql executemany 批量插入数据

    import pymysqlimport timedb = pymysql.connect("IP","username","password&quo ...