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 的用途。


温温酱
浏览 161回答 2
2回答

有只小跳蛙

您必须先清空缺失值。handle_unknown='ignore'不涉及 NaN 值,但不涉及新类别ohe。您可以将 NaN 视为一个不同的类别,如下所示:train = train.fillna("NaN")test = test.fillna("NaN")

芜湖不芜

我不知道该函数的用途,但运行代码并查看结果告诉我以下信息:您收到的 ValueError 告诉您,该函数需要数字数据 - 而不是字符串。另请注意,“handle_unknown”标志并不意味着该函数采用 None 或 nan 值,而是管理如何处理测试数据中不存在于训练数据中的类别(参见下面的示例)。以下包括未知类别的代码正在运行:import pandas as pdimport numpy as npfrom sklearn.preprocessing import OneHotEncodertrain = pd.DataFrame({        'users':[1,2,3,4],'users2':[1,2,3,4]})test = pd.DataFrame({        'users':[0,1,3,4,10],'users3':[1,2,3,4,5]})ohe = OneHotEncoder(sparse=False,handle_unknown='ignore')ohe.fit(train)train_transformed = ohe.fit_transform(train)test_transformed = ohe.transform(test)print(test_transformed)希望有帮助。替换缺失数据的工作类似于先前答案所建议的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python