Scikit научиться менять категориальное значение с отсутствующими данными на числовое - PullRequest
0 голосов
/ 04 апреля 2020

Я использую sklearn для проекта машинного обучения, и один из столбцов представлен в категориальной форме. Я хотел бы преобразовать его в числовую форму с помощью порядкового кодировщика, а затем вложить недостающие данные. OrdinalEncoder от Sklearn выдает ошибку:

ValueError: Input contains NaN

, но я бы действительно не хотел сначала использовать категориальный импутер, а затем преобразовывать значения в числа, потому что он гораздо меньше подходит для характера данных. Есть ли способ обойти это?

вот код:

from sklearn.preprocessing import OrdinalEncoder
ordinalenc = OrdinalEncoder()
imd = ordinalenc.fit_transform(info[["imd_band"]])
print(ordinalenc.categories_)

1 Ответ

0 голосов
/ 04 апреля 2020

Документированный inline

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
...