Scikit学习如何将缺少数据的分类值更改为数字值

问题描述 投票:-1回答:1

我正在将sklearn用于机器学习项目,其中一列是分类形式。我想使用序数编码器将其转换为数字形式,然后估算缺少的数据。 Sklearn的OrdinalEncoder引发错误:

ValueError: Input contains NaN

但是我真的不希望先使用分类错误,然后再将值转换为数字,因为它不太适合数据的性质。有什么办法解决吗?

这里是代码:

from sklearn.preprocessing import OrdinalEncoder
ordinalenc = OrdinalEncoder()
imd = ordinalenc.fit_transform(info[["imd_band"]])
print(ordinalenc.categories_)
python scikit-learn imputation
1个回答
0
投票

内嵌文件

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd
from sklearn.impute import SimpleImputer

df = pd.DataFrame({'x': ['a','b','b',np.NaN]*3})
ordinalenc = OrdinalEncoder()
# Catagorial to Ordinal of only not NAN values
df.loc[df['x'].notnull(), 'new_x']  = ordinalenc.fit_transform(df[df['x'].notnull()])
# Now impute 
im = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
df['new_x'] = im.fit_transform(df['new_x'].values.reshape(-1, 1))
print (df)

输出

    x   new_x
0   a   0.0
1   b   1.0
2   b   1.0
3   NaN 1.0
4   a   0.0
5   b   1.0
6   b   1.0
7   NaN 1.0
8   a   0.0
9   b   1.0
10  b   1.0
11  NaN 1.0
© www.soinside.com 2019 - 2024. All rights reserved.