Композитная трансформация колонок
Рассмотрим композитные трансформаторы значений колонок, которые можно применять в пайплайнах для избирательных преобразований. Например, если требуется к части колонок применить энкодер, а к другой нормализатор. Создадим демонстрационный датафрейм:
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)
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: