pandas.cut使用总结

用途

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个区间并指定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分为了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

原文地址:https://www.cnblogs.com/sench/p/10128216.html

时间: 2024-10-18 16:36:09

pandas.cut使用总结的相关文章

Pandas中的qcut和cut

qcut与cut的主要区别: qcut:传入参数,要将数据分成多少组,即组的个数,具体的组距是由代码计算 cut:传入参数,是分组依据.具体见示例 1.qcut方法,参考链接:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.qcut.html 1).参数:pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise') >>>

Python数据分析--Pandas知识点(二)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表df 1 import pandas as pd 2 3 df = pd.DataFrame({"地区": ["A区","B区", "C区"], 4 "前半年销量": [3500, 4500,3800], 5

Pandas系列(十三)-其他常用功能

一.统计数据频率 1. values_counts pd.value_counts(df.column_name) df.column_name.value_counts() Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)[source] Return a Series containing counts of unique values. 参数详解 normaliz

数据预处理之离散化

按照我们对于变量的分类:分为数值变量和分类变量,数值变量可以分为连续型和离散型,分类变量又有有序的和无序的.下面我将介绍一些对于这些变量进行离散化处理. 无序分类变量的离散化方法: 比如在泰坦尼克号当中,有一个变量叫做乘客登陆的港口,取值为(C, Q, S)代表三个地方.这是一个典型的无序分类变量,我们在进行数据预处理的时候应该如何进行. 一种很容易想到的方法就是把每个值映射为一个数字,比如C=0, Q=1, S=2. 但是这样容易产生一个问题:我们实际上是把它们当做了有序的数字来进行看待了,2

Kaggle项目泰坦尼克号预测生存情况(上)-------数据预处理

假期闲着无聊,做了一下Kaggle练手的项目--预测泰坦尼克号乘客的存活情况.对于一些函数和算法,刚开始也是懵懵懂懂的,但通过自己查资料,还是明白了许多,我会把参考资料的网址放在需要查看的地方. ------------------------------------ 我们的整个流程如下: ①数据预处理:数据清洗.可视化.标签化 ②分割训练数据 ③随机森林分类器及其参数调节 数据预处理:数据清洗.可视化.标签化 首先,先导入需要的模块并读取数据 #导入包,读取数据 import numpy as

python数据分析-数据处理

数据导入: 导入csv from pandas import read_csv; df = read_csv('D://PA//4.1//1.csv') 导入文本,要转成UTF-8无BOM格式: from pandas import read_table; df = read_table('D://PA//4.1//2.txt') 导入excle from pandas import read_excel; df = read_excel('C:/PA/4.1/3.xlsx') 数据导出: 数据

Python大数据分析之数据处理

# -*- coding: utf-8 -*- #1, read_table()读取txt文件 from pandas import read_table df=read_table(r'D:\rz.txt',sep=" ") '''查看前3条数据,默认是5条''' print(df.head(3)) #2, read_csv()读取csv文件 from pandas import read_csv df=read_csv(r'D:\rz.csv',sep=",")

pandas中cut()函数使用实例

所用数据文件名为"wz1.csv",数据的格式如下图所示(这里仅提供部分样本数据): 针对以上数据,本文要实现的是根据"影视时长",对观看时长按每10分钟一个段进行分区.使用bins设置时间分段,使用labels设置对应的时间段描述. 代码如下: 最终输出对应时间段的影视的个数. 结果如下图所示: 由输出结果可知,影视的主要时长落在40到50分钟这一时间段. (这只是个人学习过程中的一点笔记哈) 原文地址:https://www.cnblogs.com/smmgzj

python pandas numpy matplotlib 常用方法及函数

import numpy as np import pandas as pd import matplotlib.pyplot as plt ---------------numpy----------------------- arr = np.array([1,2,3], dtype=np.float64) np.zeros((3,6)) np.empty((2,3,2)) np.arange(15) arr.dtype arr.ndim arr.shape arr.astype(np.in