首页 > 解决方案 > NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError

问题描述

这是我的代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder

train = pd.DataFrame({
        'users':['John Johnson','John Smith','Mary Williams']
})
test = pd.DataFrame({
        'users':[None,np.nan,'John Smith','Mary Williams']
})

ohe = OneHotEncoder(sparse=False,handle_unknown='ignore')
ohe.fit(train)
train_transformed = ohe.fit_transform(train)

test_transformed = ohe.transform(test)
print(test_transformed)

我希望 OneHotEncoder 能够处理测试数据集中的 np.nan,因为

handle_unknown='ignore'

但它给出了ValueError。它虽然能够处理 None 值。为什么它失败了?我该如何绕过它(除了 Imputer)?

从文档(https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html)看来,这就是 handle_unknown 的用途。

标签: pythonpandasnumpymachine-learningscikit-learn

解决方案


您必须先清空缺失值。handle_unknown='ignore'不涉及 NaN 值,但不涉及新类别ohe

您可以将 NaN 视为一个不同的类别,如下所示:

train = train.fillna("NaN")
test = test.fillna("NaN")

推荐阅读