У меня есть фрейм данных с двумя категориальными столбцами, содержащими один и тот же набор строк, которые я хочу быстро кодировать. Определяется набор строк, которые могут содержать столбцы, и кодирование в одно касание должно быть согласованным между двумя столбцами. Оба столбца содержат все возможные значения, даже несколько раз.
В приведенном ниже примере я поместил кодировщик в список, содержащий набор строк, которые могут содержать столбцы. Затем преобразуйте столбцы кадра данных.
Вопрос 1: имеет ли это смысл?
Вопрос 2: Как получить разные имена для столбцов, возвращаемые путем горячего кодирования двух столбцов? Теперь я могу разместить столбцы в графе данных, но они имеют общие имена. Это проблема, верно? Как этого избежать?
#list of values
all_stuff = ['Boat','Bike']
#create dataframe
data = {'Stuff': ['Bike', 'Boat'], 'More Stuff': ['Boat', 'Bike']}
index = range(len(data['Stuff']))
columns = ['Stuff','More Stuff']
df = pd.DataFrame(data, index=index, columns=columns)
df
#label encoder
label_encoder = LabelEncoder()
label_encoder.fit(all_stuff)
df['Stuff'] = label_encoder.transform(df['Stuff'])
df
df['More Stuff'] = label_encoder.transform(df['More Stuff'])
df
#one-hot encoding on first column (fit and transform)
enc = OneHotEncoder(handle_unknown='ignore')
stuff_cols = enc.fit(df['Stuff'].values.reshape(-1, 1))
stuff_cols = enc.transform(df['Stuff'].values.reshape(-1, 1)).toarray()
stuff_cols
df = pd.concat([df, pd.DataFrame(stuff_cols, columns=enc.get_feature_names())], axis=1)
df
#one hot enc on second column (ONLY tranform)
more_stuff_cols = enc.transform(df['More Stuff'].values.reshape(-1, 1)).toarray()
more_stuff_cols
df = pd.concat([df, pd.DataFrame(more_stuff_cols, columns=enc.get_feature_names())], axis=1)
df
#the column nales are the same!!