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 toma 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'
)
El argumento remainder
especifica la acción a tomar con las columnas no mencionadas en make_column_transformer
(en este caso, columnas distintas de 'gender'
y 'education'
).
Por defecto, está configurado como 'drop'
, lo que significa que cualquier columna no mencionada será eliminada del conjunto de datos. Para incluir estas columnas sin modificar en la salida, establezca remainder
en 'passthrough'
.
Por ejemplo, considere el archivo exams.csv
. Contiene varias columnas nominales ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) y 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())
Utilizando ColumnTransformer
, los datos nominales pueden transformarse con OneHotEncoder
y los datos ordinales con 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))
El ColumnTransformer
es en sí mismo un transformador, por lo que proporciona los métodos estándar .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
Can you explain what the `remainder='passthrough'` argument does?
How do I specify custom order for ordinal categories in `OrdinalEncoder`?
What does the output of `ct.fit_transform(df)` look like?
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 toma 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'
)
El argumento remainder
especifica la acción a tomar con las columnas no mencionadas en make_column_transformer
(en este caso, columnas distintas de 'gender'
y 'education'
).
Por defecto, está configurado como 'drop'
, lo que significa que cualquier columna no mencionada será eliminada del conjunto de datos. Para incluir estas columnas sin modificar en la salida, establezca remainder
en 'passthrough'
.
Por ejemplo, considere el archivo exams.csv
. Contiene varias columnas nominales ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) y 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())
Utilizando ColumnTransformer
, los datos nominales pueden transformarse con OneHotEncoder
y los datos ordinales con 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))
El ColumnTransformer
es en sí mismo un transformador, por lo que proporciona los métodos estándar .fit()
, .fit_transform()
y .transform()
.
¡Gracias por tus comentarios!