如何在使用sklearn进行一次热编码后给出列名?

时间:2017-07-13 12:16:55

标签: encoding scikit-learn one-hot-encoding

这是我的问题,我希望有人可以帮我弄清楚..

为了解释,我的数据集中有超过10个分类列,每个列有200-300个类别。我想将它们转换为二进制值。为此,我使用第一个标签编码器将字符串类别转换为数字。标签编码器代码和输出如下所示。

enter image description here

在Label Encoder之后,我使用了One Hot Encoder来scikit-learn再次学习它。 但问题是,我需要一个热编码器后的列名。例如,A列在编码之前带有分类值。  A = [1,2,3,4,..]

编码后应该是这样,

A-1,A-2,A-3

任何人都知道如何在一次热编码后将列名分配给(旧列名称 - 值名称或数字)。这是我的热门编码和它的输出;

enter image description here

我需要名字列,因为我训练了人工神经网络,但每次数据出现时我都无法一次又一次地转换所有过去的数据。所以,我想每次都添加新的。无论如何.. ..

2 个答案:

答案 0 :(得分:0)

我使用以下代码将每个“一键编码”列重命名为“原始名称_一键编码名称”。因此,对于您的示例,它将给出A_1,A_2,A_3。随时将下面的“ _”更改为“-”。

#Create list of columns with "object" dtype
cat_cols = [col for col in df_pro.columns if df_pro[col].dtype == np.object]

#Find the array of new columns from one-hot encoding
cat_labels = ohenc.categories_

#Convert array of columns into list
cat_labels = np.concatenate(cat_labels).ravel().tolist()

#Use list comprehension to generate new list with labels needed    
cat_labels_new = [(col + "_" + label) for label in cat_labels for col in cat_cols if 
label in df_pro[col].values.tolist()]

#Create new DataFrame of transformed columns using new list labels
cat_ohc = pd.DataFrame(cat_arr, columns = cat_labels)

#Concat with original DataFrame and drop original columns (only columns with "object" dtype)

答案 1 :(得分:-2)

如@Vivek Kumar所述,您可以使用pandas函数get_dummies()代替OneHotEncoder。我想保留我最初的DataFrame的版本,所以我做了以下工作;

import pandas as pd
DataFrame2 = pd.get_dummies(DataFrame)