You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码运行出现KeyError:411,请求分析错误原因及解决方法

分析KeyError: 411的原因

这个错误的核心问题出在你对pandas Series的索引方式上:

  • 你的y是从DataFrame中取出的Series(data['y']),它的索引不一定是从0开始的连续整数。
  • 而你在循环里用k(从0到len(y_pred)-1的整数)去直接索引y[k],当k这个值不在y的索引列表里时,就会触发KeyError——比如这里的411,说明你的y的索引中没有411这个键。
修复方案

有两种简单的方式解决这个索引问题:

方案1:使用iloc按位置取值

把代码中访问y[k]的地方改成y.iloc[k],iloc是pandas中专门按**位置(从0开始的顺序)**取值的方法,不管原索引是什么:

my_dict = {} 
val = data['prob'] 
y = data['y'] 
for i in val: 
    y_pred = [] 
    FP = 0 
    FN = 0 
    for j in val: 
        if (j >= i): 
            y_pred.append(1) 
        else: 
            y_pred.append(0) 
    for k in range(len(y_pred)): 
        # 改成iloc按位置取值
        if (y.iloc[k] == 1 and y_pred[k] == 0): 
            FN += 1 
        elif (y.iloc[k] == 0 and y_pred[k] == 1): 
            FP += 1 
    A = (500 * FN)+(100 * FP) 
    my_dict[i] = A 
min(my_dict)

方案2:把y转换成普通列表

提前把y转换成Python列表,这样用整数索引就不会有问题:

my_dict = {} 
val = data['prob'] 
# 转换成列表
y = data['y'].tolist() 
for i in val: 
    y_pred = [] 
    FP = 0 
    FN = 0 
    for j in val: 
        if (j >= i): 
            y_pred.append(1) 
        else: 
            y_pred.append(0) 
    for k in range(len(y_pred)): 
        if (y[k] == 1 and y_pred[k] == 0): 
            FN += 1 
        elif (y[k] == 0 and y_pred[k] == 1): 
            FP += 1 
    A = (500 * FN)+(100 * FP) 
    my_dict[i] = A 
min(my_dict)
额外优化建议

你的代码目前效率比较低:

  • for i in val会遍历prob列的每一个值,包括重复值,做很多重复计算。可以先对val去重,比如用val = data['prob'].unique(),减少循环次数。
  • 内层的y_pred生成和FP/FN统计可以用pandas的向量化操作代替循环,大幅提升速度,比如:
val = data['prob'].unique()
y = data['y']
my_dict = {}
for i in val:
    y_pred = (data['prob'] >= i).astype(int)
    FN = ((y == 1) & (y_pred == 0)).sum()
    FP = ((y == 0) & (y_pred == 1)).sum()
    A = 500 * FN + 100 * FP
    my_dict[i] = A
min(my_dict)

这种向量化的写法不仅更快,也更简洁,不容易出错。

内容的提问来源于stack exchange,提问作者Rajeev Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:09:08