How to give column names after one hot encoding with sklearn?

Viewed 3666

Here is my question, I hope someone can help me to figure it out..

To explain, there are more than 10 categorical columns in my data set and each of them has 200-300 categories. I want to convert them into binary values. For that I used first label encoder to convert string categories into numbers. The Label Encoder code and the output is shown below.

enter image description here

After Label Encoder, I used One Hot Encoder From scikit-learn again and it is worked. BUT THE PROBLEM IS, I need column names after one hot encoder. For example, column A with categorical values before encoding. A = [1,2,3,4,..]

It should be like that after encoding,

A-1, A-2, A-3

Anyone know how to assign column names to (old column names -value name or number) after one hot encoding. Here is my one hot encoding and it's output;

enter image description here

I need columns with name because I trained an ANN, but every time data comes up I cannot convert all past data again and again. So, I want to add just new ones every time. Thank anyway..

2 Answers

As @Vivek Kumar mentioned, you can use the pandas function get_dummies() instead of OneHotEncoder. I wanted to preserve a version of my initial DataFrame so I did the folowing;

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

I used the following code to rename each one-hot encoded columns to "original name_one-hot encoded name". So for your example it would give A_1, A_2, A_3. Feel free to change the "_" below to "-".

#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)
Related