使用cut()和qcut()对数据进行分箱操作

1.cut()可以实现类似于对成绩进行优良统计的功能,来看代码示例。

假如我们有一组学生成绩,我们需要将这些成绩分为不及格(0-59)、及格(60-70)、良(71-85)、优(86-100)这几组。这时候可以用到cut()

import numpy as np import pandas as pd # 我们先给 scores传入30个从0到100随机的数 scores = np . random . uniform ( 0 , 100 , size = 30 ) # 然后使用 np.round()函数控制数据精度 scores = np . round ( scores , 1 ) # 指定分箱的区间 grades = [ 0 , 59 , 70 , 85 , 100 ] cuts = pd . cut ( scores , grades ) print ( '\nscores:' ) print ( scores ) print ( '\ncuts:' ) print ( cuts ) # 我们还可以计算出每个箱子中有多少个数据 print ( '\ncats.value_counts:' ) print ( pd . value_counts ( cuts ) ) == == == output : == == == scores : [ 6 . 50.8 80.2 22.1 60.1 75.1 30.8 50.8 81.6 17.4 13.4 24.3 67.3 84.4 63.4 21.3 17.2 3.7 40.1 12.4 15.7 23.1 67.4 94.8 72.6 12.8 81 . 82 . 70.2 54.1 ] cuts : [ ( 0 , 59 ] , ( 0 , 59 ] , ( 70 , 85 ] , ( 0 , 59 ] , ( 59 , 70 ] , . . . , ( 0 , 59 ] , ( 70 , 85 ] , ( 70 , 85 ] , ( 70 , 85 ] , ( 0 , 59 ] ] Length : 30 Categories ( 4 , interval [ int64 ] ) : [ ( 0 , 59 ] < ( 59 , 70 ] < ( 70 , 85 ] < ( 85 , 100 ] ] cuts . value_counts : ( 0 , 59 ] 17 ( 70 , 85 ] 8 ( 59 , 70 ] 4 ( 85 , 100 ] 1 dtype : int64

默认情况下,cat()的区间划分是左开右闭,可以传递right=False来改变哪一边是封闭的

代码示例:

cuts = pd.cut(scores,grades,right=False)

也可以通过向labels选项传递一个列表或数组来传入自定义的箱名

代码示例:

group_names = ['不及格','及格','良','优秀']
cuts = pd.cut(scores,grades,labels=group_names)

当我们不需要自定义划分区间时,而是需要根据数据中最大值和最小值计算出等长的箱子。

代码示例:

# 将成绩均匀的分在四个箱子中,precision=2的选项将精度控制在两位
cuts = pd.cut(scores,4,precision=2)

2.qcut()可以生成指定的箱子数,然后使每个箱子都具有相同数量的数据

代码示例:

import numpy as np
import pandas as pd
# 正态分布
data = np.random.randn(100)
# 分四个箱子
cuts = pd.qcut(data,4)
print('\ncuts:')
print(cuts)
print('\ncuts.value_counts:')
print(pd.value_counts(cuts))
======output:======
cuts:
[(-0.745, -0.0723], (0.889, 2.834], (-0.745, -0.0723], (0.889, 2.834], (0.889, 2.834], ..., (-0.745, -0.0723], (-0.0723, 0.889], (-3.1599999999999997, -0.745], (-0.745, -0.0723], (-0.0723, 0.889]]
Length: 100
Categories (4, interval[float64]): [(-3.1599999999999997, -0.745] < (-0.745, -0.0723] < (-0.0723, 0.889] <
                                    (0.889, 2.834]]
cuts.value_counts:
(0.889, 2.834]                   25
(-0.0723, 0.889]                 25
(-0.745, -0.0723]                25
(-3.1599999999999997, -0.745]    25
dtype: int64
                    使用cut()和qcut()对数据进行分箱操作1.cut()可以实现类似于对成绩进行优良统计的功能,来看代码示例。假如我们有一组学生成绩,我们需要将这些成绩分为不及格(0-59)、及格(60-70)、良(71-85)、优(86-100)这几组。这时候可以用到cut()import numpy as npimport pandas as pd# 我们先给 scores传入30个从0到1...
				
数据分箱pd.qcut()参数介绍 qcut函数是一个与分箱密切相关的函数,它基于样本分位数进行分箱,可以通过qcut获得等长的箱: pd.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise') x :一维数组或者Serise q : 表示分位数的整数或者数组, 如果是分位数的整数,例如10用于十分位,4用于四分位 如果是分位数数组,例如[0,0.25,0.5,0.75,1]用于四分位数 labels : 数组或者
pandas数据离散化 什么叫数据离散化?也可以理解为数据分组。举个简单的例子,我们有一组学生成绩的数据,我们可以将数据按照成绩的最大值和最小值划分为几个相同的区间。假设最高分100分,最低分50分,我们可以划分为两个相同宽度的范围。分别是[50,74]、[75,100]。 统计这两个区间都有多少数据。第二种是根据人数对成绩区间进行划分,所划分的区间人数基本持平。接下来具体通过代码来实现看看。 等宽划分成绩区间 import pandas as pd import numpy as np cutnum = pd.cut(tips['tip'],4) print(tips['tip']的最大值
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9]) 比如我要把这组数据分成两部分,一半大的,一半小的,如果是小的数,值就变成’small number’,大的数,值就变成’large number’: print(pd.qcut(data,[0,0.5,1],labels=['small number','large number'])) small numbers large numbers small numbers small numbers small numbers
pd.qcut函数,按照数据出现频率百分比划分,比如要把数据分为四份,则四段分别是数据的0-25%,25%-50%,50%-75%,75%-100%,每个间隔段里的元素个数都是相同的。 pd.qcut(x, q, labels=None, retbins=False, precision=3, duplicates=‘raise’) #最后一个参数 duplicates='drop’表示若有重复区间则删除 myList=[6,8,10,11,15,16] pd.qcut(myList,q=3,labels=['A','B','C']) A选项:pd.qcut作用是对数据进行等深分箱 B选项:q=3表示将数据分为三个组 C选项:q=3表示每个组中有三个数据 D选项:等深分箱:每
data['col_new']=pd.cut(data['col'],10) 2.等频: data['col_new']=pd.qcut(data['col'],10) 相同操作: 1.返回切分点,retbins=True data['col_new'],cut_bins=pd.qcut(data['col'],10,retbins=True) 2.在新的数据源上,使用之前的切分点 data_new['col_new2']=pd.cut "data": { "leaguerId": "161", "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNjEiLCJjcmVhdGVkIjoxNTI5NTcyNTkzMTI5LCJleHAiOjE1Mjk1Nzk3OTN9.U6qmR-Qa9sJpwxShLOC8WLPBlhLxWWiQTv5bZtyOV0mdyCSHnFBb_p6T5PBY20m_0m2AmrQZGfrv6hvHCPAaow" "status": 200 第二步:在接口的TESTS页签中输入以下内容(视返回值情况修改): pm.test("Status code is 200", function () { pm.response.to.have.status(200); // 把responseBody转为json字符串 var Jsondata = JSON.parse(responseBody); // 设置环境变量access-token,供后面的接口引用 pm.environment.set("access-token ", Jsondata.data.token ); 第三步:重新发送上一个接口的参数信息测试,执行后查看环境变量;如图,则表示环境变量的值已经正常存储; 3 参数化取其他接口的返回值 第一步:修改需要引用上述token值的接口参数取值,参数值value设置为{{access-token}}({{变量名}}),测试接口,正确返回即可;
python 较新的版本中,pandas.qcut()这个函数中是有duplicates这个参数的,它能解决在等频分箱中遇到的重复值过多引起报错的问题; 在比较旧版本的python中,提供一下解决办法: import pandas as pd def pct_rank_qcut(series, n): series:要分箱的列 n:箱子数 edages = pd.series([i/n for i in range(n)] # 转换成百分比 func = lambda x: (edages >= x).argmax() #函数:(edages >=
请求动态参数(例如时间戳) 有时我们在请求接口时,需要带上当前时间戳这种动态参数,那么postman能不能自动的填充上呢。 我们可以使用postman的pre-request script 首先 我们在请求参数里使用这种方式填写value参数的值为{{var}} 然后在 pre-request script 添加js代码如下。 其中var为上一步定义的相同名字,可根据自己需要修改。 pm.environment.set('var',Math.round(new Date()/1000)+10); 添加完如下图。 查看后台请求日志,此时参数值变为秒为单位的时间戳 请求相应测试
1、pd.cut() 用于将数据值按照值本身进行分段并排序到 bins 中。 参数包含:x, bins, right, include_lowest, labels, retbins, precision x :被划分的数组 bins :被划分的区间/区间数 - ① 当 bins 为整数时,表示数组 x 被划分为多少个等间距的区间; - ② 当 bins 为序列时,表示数组 x 将被划分在该指定序列中,若不在则输出 NaN; # x = [1,2,3,5,3,4,1], bins = 3 [In ]
在实践中,经常需要实现以上案例,根据score列中的分数进行分组,例如将分数为60分以下标记为bad,60分以上80分以下标记为good,80分以上标记为very good。grade列的值是确定的,仅有bad, good, very good三个值。 下面看看在pandas中如何实现: >>> import pandas as pd >>> import n...