Композитная трансформация колонок
Рассмотрим композитные трансформаторы значений колонок, которые можно применять в пайплайнах для избирательных преобразований. Например, если требуется к части колонок применить энкодер, а к другой нормализатор. Создадим демонстрационный датафрейм:
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import make_column_selector, make_column_transformer
import numpy as np
import pandas as pd
df = pd.DataFrame({'group': ['first', 'third', 'second', 'first'],
'level': [5, 3, 4, 5],
'noisy':[1,2,3,4]})
dfПосредством метода make_column_transformer можно задать набор кортежей, в каждом из которых задаются класс преобразования и набор имен колонок, к которым оно применяется:
ct = make_column_transformer((OneHotEncoder(), ['group']), (StandardScaler(), ['level']) ) ct.fit_transform(df)
Если требуется задать выбор столбцов через сложные условия, можно воспользоваться make_column_selector:
зададим выбор колонок по типу:
ct = make_column_transformer((OneHotEncoder(), make_column_selector(dtype_include=object)),
(StandardScaler(),make_column_selector(dtype_include=np.number)))
ct.fit_transform(df)или по регулярному выражению (аргумент pattern):
ct = make_column_transformer((OneHotEncoder(), make_column_selector(dtype_include=object)),
(StandardScaler(),make_column_selector(pattern=r'level'))
)
ct.fit_transform(df)Аргумент remainder позволяет задать поведение в отношении оставшихся колонок. Так как по умолчанию они исключаются, чтобы сохранить, задайте remainder='passthrough':
ct = make_column_transformer((OneHotEncoder(), make_column_selector(dtype_include=object)),
(StandardScaler(),make_column_selector(pattern=r'level')),
remainder='passthrough'
)
ct.fit_transform(df)В целом make_column_transformer создает объект класса ColumnTransformer с заданными по умолчанию именами преобразований:
Соответственно, композитную трансформацию можно создать с ColumnTransformer:
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([('oh', OneHotEncoder(), ['group']), ('enc', StandardScaler(),
['level', 'noisy'])])
ct.fit_transform(df)Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: