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

For循环迭代仅保存列表最后一个值的技术问题求助

解决循环中仅存储最后一个模型评估结果的问题

你这段代码的核心问题在于:pandas.DataFrame.append()不会原地修改原DataFrame,它会返回一个全新的DataFrame对象。你每次循环都把新生成的DataFrame赋值给model_valuation,但原始的result始终是空的——循环结束后,model_valuation自然只保留最后一次循环的结果(也就是SVM的评估数据)。

下面给出两种可行的修正方案:

方法1:直接更新原DataFrame

每次调用append后,把返回的新DataFrame重新赋值给result,让result持续累积所有模型的评估数据:

models = [KNN,NB,LR,SVM]
result = pd.DataFrame()
for i in models:
    i.fit(x_train, y_train)
    ypred = i.predict(x_test)
    # 将append后的新DataFrame重新赋值给result
    result = result.append({'Model': i, 
                          'Accuracy': accuracy_score(y_test, ypred),
                            'Recall': recall_score(y_test, ypred),
                         'Precision': precision_score(y_test, ypred),
                       'Specificity': recall_score(y_test, ypred, pos_label=0),
                          'F1 score': f1_score(y_test, ypred)}, ignore_index=True)

方法2:先收集数据再生成DataFrame(更高效)

多次调用append的效率较低,更推荐先把每个模型的评估结果存入列表,最后一次性转换为DataFrame:

models = [KNN,NB,LR,SVM]
results_list = []
for i in models:
    i.fit(x_train, y_train)
    ypred = i.predict(x_test)
    # 将当前模型的评估数据加入列表
    results_list.append({'Model': i, 
                          'Accuracy': accuracy_score(y_test, ypred),
                            'Recall': recall_score(y_test, ypred),
                         'Precision': precision_score(y_test, ypred),
                       'Specificity': recall_score(y_test, ypred, pos_label=0),
                          'F1 score': f1_score(y_test, ypred)})
# 一次性生成完整的结果DataFrame
result = pd.DataFrame(results_list)

额外优化建议

如果想让Model列显示直观的模型名称(而非对象本身),可以把模型列表改成元组格式:

models = [("KNN", KNN), ("NB", NB), ("LR", LR), ("SVM", SVM)]

然后在循环中拆分名称和模型对象:

for name, model in models:
    model.fit(x_train, y_train)
    ypred = model.predict(x_test)
    results_list.append({'Model': name, 
                          # 其余评估指标不变
                         })

内容的提问来源于stack exchange,提问作者Nikhil sahoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:36:27