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

如何在Pandas数据集指定行用Sklearn预测并保留原顺序?

对Pandas部分行调用Sklearn模型predict并保留原行顺序的方法

当然可以实现,核心思路是先创建一个与原DataFrame行数匹配的全NaN数组,再将选中行的预测结果填充到对应位置,既能保留原行顺序,又能给未选中行设为NaN。

注意:你的示例数据中包含字符串列(B列),Sklearn模型无法直接处理非数值型特征,所以需要先对这类特征做编码处理(比如独热编码、标签编码),否则会报错。以下是完整的实现代码:

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

# 模拟训练数据与流程(假设训练集和测试集特征结构一致)
X_train = pd.DataFrame({
    "A": [2, 4, 3, 6],
    "B": ["a", "b", "a", "b"],
    "c": [4, 6, 5, 7]
})
y_train = [0, 1, 0, 1]

# 构建预处理+模型的管道,处理字符串特征
preprocessor = ColumnTransformer(
    transformers=[
        ('cat', OneHotEncoder(sparse_output=False, drop='first'), ['B'])
    ],
    remainder='passthrough'  # 保留其他数值列
)

clf = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', RandomForestClassifier())
])

# 训练模型
clf.fit(X_train, y_train)

# 你的原始数据和选择条件
selection = [True, True, False, False, True, False]
data = pd.DataFrame.from_dict(
    {
        "A": [1, 5, 3, 6, 5, 7],
        "B": ["a", "b", "a", "a", "b", "b"],
        "c": [5, 7, 4, 6, 5, 2],
    }
)

# 初始化全NaN的结果序列(与原数据索引对齐)
predictions = pd.Series([pd.NA] * len(data), index=data.index)

# 对选中行执行预测,填充到对应位置
predictions[selection] = clf.predict(data[selection])

# 将结果添加到原DataFrame
data['prediction'] = predictions

print(data)

代码说明

  • 用pd.Series([pd.NA] * len(data))创建与原数据行数一致的空结果序列,确保索引和原DataFrame完全对齐
  • 通过predictions[selection] = clf.predict(data[selection]),将预测结果精准填充到选中行的位置
  • 最终的data['prediction']列会严格保留原行顺序,未选中行的值自动为NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:10:29