ValueError:not enough values to unpack/ too many values to unpack

当pandas中对每一列进行apply操作,如果输出变量设置有问题,会报错ValueError:not enough values to unpack/ too many values to unpack

def mono_bin_replace_woe(Y,X,n=20):  # 最优分箱
    r = 0
    good = Y.sum()
    bad = Y.count() - good
    while np.abs(r) < 0.4:
        d1 = pd.DataFrame({"X": X, "Y": Y, "Bucket": pd.qcut(X, n,duplicates='drop')})
        d2 = d1.groupby('Bucket', as_index=True)
        r, p = stats.spearmanr(d2.mean().X, d2.mean().Y)
        n = n - 1
    print("n,r,p",n,r,p)
    d3 = pd.DataFrame(d2.X.min(), columns=['min'])
    d3['min'] = d2.min().X
    d3['max'] = d2.max().X
    d3['sum'] = d2.sum().Y
    d3['total'] = d2.count().Y
    d3['rate'] = d2.mean().Y
    d3['woe'] = np.log((d3['rate']/(1-d3['rate']))/(good/bad))
    d3['goodattribute'] = d3['sum']/good
    d3['badattribute'] = (d3['total']-d3['sum'])/bad
    iv = ((d3['goodattribute'] - d3['badattribute']) * d3['woe']).sum()
    d4 = d3.sort_values(by='min').reset_index()
    return d4, iv, cut, woe
d4, iv, cut, woe=df2.iloc[:,1:3].apply(lambda x:mono_bin(df2['label2'], x, n=20),axis=0)

如运行上述代码会报错:not enough values to unpack,此时应改为:

df3=df2.iloc[:,1:3].apply(lambda x:mono_bin(df2['label2'], x, n=20),axis=0)

解释:

对每一列进行apply操作后,生成的数据结构是以列为维度的Series,即返回的四个变量会成为某列对应的数据,故生成值应赋给1个变量而不是4个

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值