【问题标题】:One Hot Encoded Labels back to DataFrame一个热编码标签返回 DataFrame
【发布时间】:2019-11-18 18:12:03
【问题描述】:

我想将一些分类器应用于数据帧,因此必须对 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 中的其他列“合并”。

【问题讨论】:

标签: python pandas dataframe one-hot-encoding


【解决方案1】:

你可以这样做:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2018-10-01
    • 2020-06-14
    • 2018-04-18
    • 2019-03-14
    相关资源
    最近更新 更多