Мне интересно, как я могу отслеживать исходные столбцы набора данных после выполнения предварительной обработки данных на нем?
В приведенном ниже коде df_columns
сообщит мне, что столбец 0
в df_array
равно A
, столбец 1
равен B
и т. д. ...
Однако, когда я кодирую категориальный столбец, B
df_columns
больше не подходит для отслеживания df_dummies
import pandas as pd
import numpy as np
animal = ['dog','cat','horse']
df = pd.DataFrame({'A': np.random.rand(9),
'B': [animal[np.random.randint(3)] for i in range(9)],
'C': np.random.rand(9),
'D': np.random.rand(9)})
df_array = df.values
df_columns = df.columns
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([('encoder', OneHotEncoder(), [1])], remainder='passthrough')
df_dummies = np.array(ct.fit_transform(df_array), dtype=np.float)
Решение должно быть агностично c от позиции категориального столбца ... будь то A
, B
, C
или D
. Я могу выполнить грубую работу и постоянно обновлять словарь df_columns
... но это не будет элегантно или "pythoni c"
Более того ... как будет выглядеть решение для отслеживания что значат категорики? {0,0,1} будет кошкой, {0,1,0} будет собакой и т. Д.?
PS - я знаю о фиктивной переменной-ловушке и возьму df_dummies[:,1:]
, когда я на самом деле используйте это, чтобы обучить мою модель.