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

输入含np.nan时sklearn OrdinalEncoder输出结果不一致问题求解

OrdinalEncoder多场景输出不一致问题原因及解决方案

三个场景差异的核心原因

  • 场景1(嵌套列表输入,自动推断类别):嵌套列表属于混合类型结构,其中的np.nan是真实浮点空值,OrdinalEncoder自动推断类别时会默认跳过空值,不会将其纳入有效类别,转换后空值位置保留nan输出,和预期一致。
  • 场景2(numpy数组输入,自动推断类别):numpy数组要求所有元素数据类型统一,当同时存入字符串和np.nan时,np.nan会被强制转换为字符串类型的'nan',被OrdinalEncoder判定为普通有效类别,因此被分配了编码3,不符合预期。
  • 场景3(手动指定categories参数):OrdinalEncoder默认handle_unknown='error',也就是输入值只要不在指定的类别列表里就会报错,输入中的np.nan不在给定的enc_order列表中,因此抛出ValueError异常。

符合预期的实现方案

要实现「指定有序类别、空值保留不参与编码」的效果,调整代码如下:

import numpy as np
from sklearn.preprocessing import OrdinalEncoder

dummy_array = [["1-5"],["6-10"],["10-15"],["6-10"],["10-15"],["10-15"],["1-5"],[np.nan]]
enc_order = ["1-5","6-10","10-15"]
enc = OrdinalEncoder(
    categories=[enc_order],
    handle_unknown='use_encoded_value',
    unknown_value=np.nan
)
print(enc.fit_transform(dummy_array))

输出结果如下,符合预期逻辑:

[[ 0.]
 [ 1.]
 [ 2.]
 [ 1.]
 [ 2.]
 [ 2.]
 [ 0.]
 [nan]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:54:00