我正在将sklearn用于机器学习项目,其中一列是分类形式。我想使用序数编码器将其转换为数字形式,然后估算缺少的数据。 Sklearn的OrdinalEncoder引发错误:
ValueError: Input contains NaN
但是我真的不希望先使用分类错误,然后再将值转换为数字,因为它不太适合数据的性质。有什么办法解决吗?
这里是代码:
from sklearn.preprocessing import OrdinalEncoder
ordinalenc = OrdinalEncoder()
imd = ordinalenc.fit_transform(info[["imd_band"]])
print(ordinalenc.categories_)
内嵌文件
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