Использование конвейера sklearn для обработки DataFrames - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу предварительно обработать DataFrame с помощью sklearn's Pipeline и ColumnTransformer. Мой конвейер состоит из FunctionTransformer, за которым следует ColumnTransformer, а затем другой FunctionTransformer.

У меня есть следующий DataFrame (показанный в формате dict) с различными типами столбцов:

{'A': {0: 1787, 1: 5745, 2: 25, 3: 254, 4: 4545}, 
'B': {0: 9.0, 1: 16.0, 2: 50.0, 3: 14.5, 4: 50.0}, 
'E': {0: 'Audio', 1: 'Text', 2: 'Text', 3: 'Audio', 4: 'Text'}, 
'F': {0: np.nan, 1: np.nan, 2: np.nan, 3: 1.0, 4: np.nan}}

И это мой pipe:

pipeline = Pipeline(([
        ('count_transform', FunctionTransformer(count_volume)),
        ('union', ColumnTransformer(
            [('binning', KBinsDiscretizer(n_bins=3, encode='ordinal'),
              ['B']),
              ('transform_type', FunctionTransformer(transform_type)),
               ['C', 'D']),
             ], remainder="passthrough"),
        ('another_transform', FunctionTransformer(another_transform))
    ]))

Проблема заключается в том, что из-за функции FunctionTransformer, возвращающей массив NumPy, имена столбцов информационного кадра удаляются, поэтому ColumnTransformer не может найти столбцы.

Я подумал о следующих решениях :

  • Создание собственного Transformer и возврат df: мне нужно создать много классов только для разных имеющихся у меня трансформаторов. Кроме того, методы будут иметь статус c, так как они не используют никаких свойств класса.
  • Указание столбцов по индексу: это может быть очень запутанным и приводить к ошибкам при кодировании, поскольку преобразователи иногда меняют порядок столбцов.

Есть идеи о том, что делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...