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

pandas如何将分类模型预测结果写回原始DataFrame

分类模型预测结果写回原始train/test DataFrame实现方法

核心原则

只要保证预测时输入模型的样本顺序和你要写回的DataFrame行顺序、索引完全对齐,不需要做复杂的表关联,直接赋值新列是最简单、出错概率最低的实现方式。

  • 如果你是用train_test_split直接从原始DataFrame拆分出训练集、测试集,拆分后没有做删行、乱序、重置索引的操作,直接赋值不会出现错位问题
  • 如果预处理阶段做过样本过滤、重排,必须先绑定原表索引再映射,不能直接按顺序拼接

常规场景代码实现

假设你已经完成模型选型,最优分类模型实例名为best_clf,训练集、测试集DataFrame分别为train、test,模型训练用的特征列存在feature_cols列表里:

# 写回训练集预测结果
# 1. 硬分类预测标签
train["pred_label"] = best_clf.predict(train[feature_cols])
# 2. 预测概率(二分类示例,输出正类概率;多分类可按需取对应类别概率列)
train["pred_prob_pos"] = best_clf.predict_proba(train[feature_cols])[:, 1]

# 写回测试集预测结果
test["pred_label"] = best_clf.predict(test[feature_cols])
test["pred_prob_pos"] = best_clf.predict_proba(test[feature_cols])[:, 1]

如果是刚做数据拆分的阶段,拆分时建议固定随机种子保证结果可复现,参考逻辑:

from sklearn.model_selection import train_test_split
# 原始全量数据为df,按8:2拆分训练测试集
train, test = train_test_split(df, test_size=0.2, random_state=42)

索引错位场景适配

如果预测前你对数据集做过空值过滤、异常样本剔除,导致参与预测的样本是原表的子集,不要直接赋值,按原索引映射回表:

# 示例:过滤测试集中特征为空的样本做预测,保留原表索引
test_for_pred = test.dropna(subset=feature_cols).reset_index()  # 原索引会存在"index"列
# 执行预测
pred_labels = best_clf.predict(test_for_pred[feature_cols])
# 把预测结果和原表索引绑定为Series
pred_series = pd.Series(pred_labels, index=test_for_pred["index"], name="pred_label")
# 映射回原始test表,被过滤的无有效特征的样本预测值自动留空
test["pred_label"] = pred_series

如果是交叉验证生成的训练集OOF(折外)预测结果,同样按每折拆分时的样本索引对应赋值,不要按预测结果的输出顺序直接拼接。

结果校验必做步骤

写回后必须做校验,避免索引错位导致后续分析、结果输出全错

  • 计数校验:训练集预测列的非空值数量,应该等于参与训练集预测的样本总数;测试集同理
  • 抽样校验:随机抽3-5行样本,手动把该行特征输入模型做预测,和写回的预测值比对,确认一致
  • 若数据集有唯一样本ID(如sample_id、user_id),可把预测结果和ID绑定后做一次匹配合并,确认匹配率100%

内容的提问来源于stack exchange,提问作者Alan Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:36:15