Kolumntransformer
Framåtblickande, när du anropar metoden .fit_transform(X)
på ett Pipeline
-objekt, appliceras varje transformerare på hela uppsättningen av funktioner i X
. Detta beteende är dock inte alltid önskvärt.
Till exempel kanske du inte vill koda numeriska värden eller så kan du behöva använda olika transformerare på specifika kolumner — såsom att använda OrdinalEncoder
för ordnade funktioner och OneHotEncoder
för nominella funktioner.
ColumnTransformer
löser detta problem genom att låta varje kolumn behandlas separat. För att skapa en ColumnTransformer
kan du använda funktionen make_column_transformer
från modulen sklearn.compose
.
Funktionen tar som argument tupler med transformeraren och listan av kolumner som denna transformerare ska appliceras på.
Till exempel kan vi skapa en ColumnTransformer
som applicerar OrdinalEncoder
endast på kolumnen 'education'
och OneHotEncoder
endast på kolumnen 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Argumentet remainder
anger åtgärden för kolumner som inte nämns i make_column_transformer
(i detta fall, andra kolumner än 'gender'
och 'education'
).
Som standard är det satt till 'drop'
, vilket innebär att alla icke nämnda kolumner tas bort från datasetet. För att inkludera dessa kolumner oförändrade i utdata, sätt remainder
till 'passthrough'
.
Till exempel, överväg filen exams.csv
. Den innehåller flera nominala kolumner ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) och en ordinal kolumn, '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())
Med hjälp av ColumnTransformer
kan nominella data transformeras med OneHotEncoder
och ordnala data med OrdinalEncoder
i ett enda steg.
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))
ColumnTransformer
är i sig själv en transformerare, så den tillhandahåller de standardiserade metoderna .fit()
, .fit_transform()
och .transform()
.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Kolumntransformer
Svep för att visa menyn
Framåtblickande, när du anropar metoden .fit_transform(X)
på ett Pipeline
-objekt, appliceras varje transformerare på hela uppsättningen av funktioner i X
. Detta beteende är dock inte alltid önskvärt.
Till exempel kanske du inte vill koda numeriska värden eller så kan du behöva använda olika transformerare på specifika kolumner — såsom att använda OrdinalEncoder
för ordnade funktioner och OneHotEncoder
för nominella funktioner.
ColumnTransformer
löser detta problem genom att låta varje kolumn behandlas separat. För att skapa en ColumnTransformer
kan du använda funktionen make_column_transformer
från modulen sklearn.compose
.
Funktionen tar som argument tupler med transformeraren och listan av kolumner som denna transformerare ska appliceras på.
Till exempel kan vi skapa en ColumnTransformer
som applicerar OrdinalEncoder
endast på kolumnen 'education'
och OneHotEncoder
endast på kolumnen 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Argumentet remainder
anger åtgärden för kolumner som inte nämns i make_column_transformer
(i detta fall, andra kolumner än 'gender'
och 'education'
).
Som standard är det satt till 'drop'
, vilket innebär att alla icke nämnda kolumner tas bort från datasetet. För att inkludera dessa kolumner oförändrade i utdata, sätt remainder
till 'passthrough'
.
Till exempel, överväg filen exams.csv
. Den innehåller flera nominala kolumner ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) och en ordinal kolumn, '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())
Med hjälp av ColumnTransformer
kan nominella data transformeras med OneHotEncoder
och ordnala data med OrdinalEncoder
i ett enda steg.
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))
ColumnTransformer
är i sig själv en transformerare, så den tillhandahåller de standardiserade metoderna .fit()
, .fit_transform()
och .transform()
.
Tack för dina kommentarer!