ColumnTransformer
De cara al futuro, cuando se invoca el método .fit_transform(X)
en un objeto Pipeline
, este aplica cada transformador al conjunto completo de características en X
. Sin embargo, este comportamiento puede no ser siempre el deseado.
Por ejemplo, es posible que no se desee codificar valores numéricos o que se necesite aplicar diferentes transformadores a columnas específicas — como utilizar OrdinalEncoder
para características ordinales y OneHotEncoder
para características nominales.
El ColumnTransformer
resuelve este problema al permitir que cada columna sea tratada por separado. Para crear un ColumnTransformer
, se puede utilizar la función make_column_transformer
del módulo sklearn.compose
.
La función recibe como argumentos tuplas con el transformador y la lista de columnas a las que se debe aplicar dicho transformador.
Por ejemplo, se puede crear un ColumnTransformer
que aplique el OrdinalEncoder
solo a la columna 'education'
y el OneHotEncoder
solo a la columna 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Por ejemplo, se utilizará un archivo exams.csv
que contiene columnas nominales ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
). También contiene una columna ordinal, 'parental level of education'
.
12345import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
Con la ayuda de ColumnTransformer
, es posible transformar simultáneamente datos nominales utilizando OneHotEncoder
y datos ordinales utilizando OrdinalEncoder
en un solo paso.
123456789101112131415import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
"Como cabría esperar, el ColumnTransformer
es un transformador, por lo que incluye todos los métodos necesarios para un transformador, como .fit()
, .fit_transform()
y .transform()
.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 3.13
ColumnTransformer
Desliza para mostrar el menú
De cara al futuro, cuando se invoca el método .fit_transform(X)
en un objeto Pipeline
, este aplica cada transformador al conjunto completo de características en X
. Sin embargo, este comportamiento puede no ser siempre el deseado.
Por ejemplo, es posible que no se desee codificar valores numéricos o que se necesite aplicar diferentes transformadores a columnas específicas — como utilizar OrdinalEncoder
para características ordinales y OneHotEncoder
para características nominales.
El ColumnTransformer
resuelve este problema al permitir que cada columna sea tratada por separado. Para crear un ColumnTransformer
, se puede utilizar la función make_column_transformer
del módulo sklearn.compose
.
La función recibe como argumentos tuplas con el transformador y la lista de columnas a las que se debe aplicar dicho transformador.
Por ejemplo, se puede crear un ColumnTransformer
que aplique el OrdinalEncoder
solo a la columna 'education'
y el OneHotEncoder
solo a la columna 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Por ejemplo, se utilizará un archivo exams.csv
que contiene columnas nominales ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
). También contiene una columna ordinal, 'parental level of education'
.
12345import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
Con la ayuda de ColumnTransformer
, es posible transformar simultáneamente datos nominales utilizando OneHotEncoder
y datos ordinales utilizando OrdinalEncoder
en un solo paso.
123456789101112131415import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
"Como cabría esperar, el ColumnTransformer
es un transformador, por lo que incluye todos los métodos necesarios para un transformador, como .fit()
, .fit_transform()
y .transform()
.
¡Gracias por tus comentarios!