一个热编码标签回到DataFrame

时间:2019-07-09 08:23:11

标签: python pandas dataframe one-hot-encoding

我想对数据框应用一些分类器,因此不得不对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

我得到一个形状为(14737,990)的numpy数组,充满了零和一(这当然是我想要的),但是如何将其“合并”回我的数据框(即带有标签等) )

我的目标不是“解码”标签,而是将编码的列与原始df中的其他列“合并”。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

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]