One Hot Encoded Labels обратно в DataFrame - PullRequest
0 голосов
/ 09 июля 2019

Я хочу применить некоторые классификаторы к фрейму данных и, таким образом, должен был выполнить горячее кодирование df.У меня сейчас есть ярлыки, но я не знаю, как поступить?Как вернуть метки обратно в тип df и как мне работать с новым df?

У меня сокращенный фрейм данных без значений NaN.Сначала я его кодировал, а затем приступил к его горячему кодированию.

categorical_feature_mask = reduced_df.dtypes==object
categorical_cols = reduced_df.columns[categorical_feature_mask].tolist()
categorical_cols

reduced_df[categorical_cols] = reduced_df[categorical_cols].apply(lambda col: le.fit_transform(col))

labeled_df = reduced_df[categorical_cols]
enc = preprocessing.OneHotEncoder()

enc.fit(labeled_df)
onehotlabels = enc.transform(labeled_df).toarray()
onehotlabels

Я получаю массив numpy с формой (14737, 990), полный нулей и единиц (что, конечно,то, что я хотел), но как мне «объединить» его с моим фреймом данных (т. е. с метками и т. д.)

Моя цель - не «декодировать» метки, а «объединить» закодированные столбцы сдругие колонки из моего оригинального df.

1 Ответ

0 голосов
/ 09 июля 2019

Вы можете сделать это следующим образом:

reduced_df=pd.DataFrame({
'some_column': [35, 21, 39, 44, 62, 54, 85, 92, 25, 81],
'color'      : ['red', 'green', 'blue', 'black', 'black', 'black', 'black', 'black', 'black', 'black'],
'brand'      : ['Chrysler', 'BMW', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes'],
})

categorical_feature_mask = reduced_df.dtypes==object
categorical_cols = reduced_df.columns[categorical_feature_mask].tolist()
labeled_df = reduced_df[categorical_cols]
enc = OneHotEncoder()
enc.fit(labeled_df)

onehotlabels = enc.transform(labeled_df).toarray()

new_columns=list()
for col, values in zip(labeled_df.columns, enc.categories_):
    new_columns.extend([col + '_' + str(value) for value in values])

new_df= pd.concat([reduced_df, pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
new_df

Вывод:

Out[44]: 
   some_column  color     brand  color_black       ...        color_red  brand_BMW  brand_Chrysler  brand_Mercedes
0           35    red  Chrysler          0.0       ...              1.0        0.0             1.0             0.0
1           21  green       BMW          0.0       ...              0.0        1.0             0.0             0.0
2           39   blue  Mercedes          0.0       ...              0.0        0.0             0.0             1.0
3           44  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
4           62  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
5           54  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
6           85  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
7           92  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
8           25  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0
9           81  black  Mercedes          1.0       ...              0.0        0.0             0.0             1.0

[10 rows x 10 columns]
...