 ColumnTransformer
ColumnTransformer
Wenn Sie die Methode .fit_transform(X) auf ein Pipeline-Objekt anwenden, wird jeder Transformer auf den gesamten Merkmalsraum in X angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.
Beispielsweise sollen numerische Werte möglicherweise nicht kodiert werden oder es ist erforderlich, verschiedene Transformer auf bestimmte Spalten anzuwenden — etwa die Verwendung von OrdinalEncoder für ordinale Merkmale und OneHotEncoder für nominale Merkmale.
Der ColumnTransformer löst dieses Problem, indem jede Spalte separat behandelt werden kann. Zur Erstellung eines ColumnTransformer kann die Funktion make_column_transformer aus dem Modul sklearn.compose verwendet werden.
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, was bedeutet, dass alle nicht erwähnten Spalten aus dem Datensatz entfernt werden. Um diese Spalten unverändert im Output zu belassen, muss remainder auf 'passthrough' gesetzt werden.
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 ColumnTransformer können nominale Daten mit OneHotEncoder und ordinale Daten mit 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
Awesome!
Completion rate improved to 3.13 ColumnTransformer
ColumnTransformer
Swipe um das Menü anzuzeigen
Wenn Sie die Methode .fit_transform(X) auf ein Pipeline-Objekt anwenden, wird jeder Transformer auf den gesamten Merkmalsraum in X angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.
Beispielsweise sollen numerische Werte möglicherweise nicht kodiert werden oder es ist erforderlich, verschiedene Transformer auf bestimmte Spalten anzuwenden — etwa die Verwendung von OrdinalEncoder für ordinale Merkmale und OneHotEncoder für nominale Merkmale.
Der ColumnTransformer löst dieses Problem, indem jede Spalte separat behandelt werden kann. Zur Erstellung eines ColumnTransformer kann die Funktion make_column_transformer aus dem Modul sklearn.compose verwendet werden.
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, was bedeutet, dass alle nicht erwähnten Spalten aus dem Datensatz entfernt werden. Um diese Spalten unverändert im Output zu belassen, muss remainder auf 'passthrough' gesetzt werden.
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 ColumnTransformer können nominale Daten mit OneHotEncoder und ordinale Daten mit 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!