代码示例:
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...