为了账号安全,请及时绑定邮箱和手机立即绑定

NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError

NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError

温温酱 2022-06-14 17:12:44
这是我的代码import pandas as pdimport numpy as npfrom sklearn.preprocessing import OneHotEncodertrain = 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 的用途。
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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


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


train = train.fillna("NaN")

test = test.fillna("NaN")


查看完整回答
反对 回复 2022-06-14
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

我不知道该函数的用途,但运行代码并查看结果告诉我以下信息:


您收到的 ValueError 告诉您,该函数需要数字数据 - 而不是字符串。


另请注意,“handle_unknown”标志并不意味着该函数采用 None 或 nan 值,而是管理如何处理测试数据中不存在于训练数据中的类别(参见下面的示例)。


以下包括未知类别的代码正在运行:


import pandas as pd

import numpy as np

from sklearn.preprocessing import OneHotEncoder


train = 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)

希望有帮助。替换缺失数据的工作类似于先前答案所建议的。


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号