ColumnTransformer
Ein Blick voraus: Wenn Sie die Methode .fit_transform(X)
auf einem Pipeline
-Objekt aufrufen, wird jeder Transformer auf den gesamten Merkmalsraum in X
angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.
Beispielsweise möchten Sie numerische Werte möglicherweise nicht kodieren oder Sie müssen verschiedene Transformer auf bestimmte Spalten anwenden – etwa den OrdinalEncoder
für ordinale Merkmale und den OneHotEncoder
für nominale Merkmale.
Der ColumnTransformer
löst dieses Problem, indem jede Spalte separat behandelt werden kann. Einen ColumnTransformer
erstellen Sie mit der Funktion make_column_transformer
aus dem Modul sklearn.compose
.
Die Funktion erhält als Argumente Tupel mit dem Transformer und der Liste der Spalten, auf die dieser Transformer angewendet werden soll.
Beispielsweise kann ein ColumnTransformer
erstellt werden, der den OrdinalEncoder
nur auf die Spalte 'education'
und den OneHotEncoder
nur auf die Spalte 'gender'
anwendet.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Das Argument remainder
legt fest, wie mit Spalten umgegangen wird, die in make_column_transformer
nicht erwähnt werden (in diesem Fall alle Spalten außer 'gender'
und 'education'
).
Standardmäßig ist es auf 'drop'
gesetzt, d.h. alle nicht genannten Spalten werden aus dem Datensatz entfernt. Um diese Spalten unverändert im Output zu behalten, setzen Sie remainder
auf 'passthrough'
.
Zum Beispiel enthält die Datei exams.csv
mehrere nominale Spalten ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) und eine ordinale Spalte, '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())
Mit dem ColumnTransformer
können nominale Daten mit dem OneHotEncoder
und ordinale Daten mit dem OrdinalEncoder
in einem einzigen Schritt transformiert werden.
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))
Der ColumnTransformer
ist selbst ein Transformer und stellt daher die Standardmethoden .fit()
, .fit_transform()
und .transform()
bereit.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
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
Swipe um das Menü anzuzeigen
Ein Blick voraus: Wenn Sie die Methode .fit_transform(X)
auf einem Pipeline
-Objekt aufrufen, wird jeder Transformer auf den gesamten Merkmalsraum in X
angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.
Beispielsweise möchten Sie numerische Werte möglicherweise nicht kodieren oder Sie müssen verschiedene Transformer auf bestimmte Spalten anwenden – etwa den OrdinalEncoder
für ordinale Merkmale und den OneHotEncoder
für nominale Merkmale.
Der ColumnTransformer
löst dieses Problem, indem jede Spalte separat behandelt werden kann. Einen ColumnTransformer
erstellen Sie mit der Funktion make_column_transformer
aus dem Modul sklearn.compose
.
Die Funktion erhält als Argumente Tupel mit dem Transformer und der Liste der Spalten, auf die dieser Transformer angewendet werden soll.
Beispielsweise kann ein ColumnTransformer
erstellt werden, der den OrdinalEncoder
nur auf die Spalte 'education'
und den OneHotEncoder
nur auf die Spalte 'gender'
anwendet.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Das Argument remainder
legt fest, wie mit Spalten umgegangen wird, die in make_column_transformer
nicht erwähnt werden (in diesem Fall alle Spalten außer 'gender'
und 'education'
).
Standardmäßig ist es auf 'drop'
gesetzt, d.h. alle nicht genannten Spalten werden aus dem Datensatz entfernt. Um diese Spalten unverändert im Output zu behalten, setzen Sie remainder
auf 'passthrough'
.
Zum Beispiel enthält die Datei exams.csv
mehrere nominale Spalten ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) und eine ordinale Spalte, '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())
Mit dem ColumnTransformer
können nominale Daten mit dem OneHotEncoder
und ordinale Daten mit dem OrdinalEncoder
in einem einzigen Schritt transformiert werden.
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))
Der ColumnTransformer
ist selbst ein Transformer und stellt daher die Standardmethoden .fit()
, .fit_transform()
und .transform()
bereit.
Danke für Ihr Feedback!