字符串转为数字
final_df["xx"] = pd.factorize(final_df["xx"])[0].astype(int)
分箱报错
Qcut Pandas : ValueError: Bin edges must be unique
报错:
在使用qcut进行等频分箱时,报错**“Qcut Pandas : ValueError: Bin edges must be unique”
原因:
qcut按照等频方式分箱,且要求分位点处的取值唯一。当有多个元素有相同的分位点处取值时,就会报错
解决:
添加.rank(method=‘first’),相同取值元素的rank不同
pd.qcut(df['a'], 10) ## 修改前
pd.qcut(df['a'].rank(method='first'), 10) ## 修改后
等宽分箱
pd.qcut()参数介绍
先看一下官方文档给出的函数作用:
基于分位数的离散化功能。 将变量离散化为基于等级或样本分位数的相等大小的存储桶。
再来看一下这个函数都包含有哪些参数,主要参数的含义与作用都是什么?
和pd.cut()相比,pd.qcut()的参数少了两个,少了right和include_lowest两个参数,剩下的参数几乎和pd.cut()一模一样了。
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 : 数组或者布尔值,默认为none,用于指定每个箱体的标签
如果是数组,长度要与分箱个数一致,比如用四分位数分箱,需要指定四个标签
如果为False,则仅返回分箱的整数指示符,即当前数据位于哪个箱子中
rebines :布尔值,可选。 是否显示分箱的分界值。(由于是按照分位数进行分箱,在不知道分位数具体数值的情况下,可以通过这个参数设置显示分界值即分位数的具体数值)
precision:整数,默认3,存储和显示分箱标签的精度。
duplicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一
pd.qcut()的参数就是这些了,并不是所有的参数都常用,下边我们通过代码示例来看一下常用参数的应用。
例子
pd.qcut(df_f.积分,4,labels=["低","中","高","很高"])
分箱报错
Bin labels must be one fewer than the number of bin edges
看是不是后面的标签给多了或者少了。。。
报错
AttributeError: module 'sklearn.metrics' has no attribute 'calinski_harabaz_score'
升级sklearn