这是我的问题,我希望有人可以帮我弄清楚..
为了解释,我的数据集中有超过10个分类列,每个列有200-300个类别。我想将它们转换为二进制值。为此,我使用第一个标签编码器将字符串类别转换为数字。标签编码器代码和输出如下所示。
在Label Encoder之后,我使用了One Hot Encoder来scikit-learn再次学习它。 但问题是,我需要一个热编码器后的列名。例如,A列在编码之前带有分类值。 A = [1,2,3,4,..]
编码后应该是这样,
A-1,A-2,A-3
任何人都知道如何在一次热编码后将列名分配给(旧列名称 - 值名称或数字)。这是我的热门编码和它的输出;
我需要名字列,因为我训练了人工神经网络,但每次数据出现时我都无法一次又一次地转换所有过去的数据。所以,我想每次都添加新的。无论如何.. ..
答案 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)