Kolumntransformer
Framåtblickande, när du anropar metoden .fit_transform(X) på ett Pipeline-objekt, tillämpar den 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 tillämpas på.
Till exempel kan vi skapa en ColumnTransformer som tillämpar 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 kolumner andra än 'gender' och 'education').
Som standard är det satt till 'drop', vilket innebär att alla icke nämnda kolumner tas bort från datamängden. 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, tillämpar den 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 tillämpas på.
Till exempel kan vi skapa en ColumnTransformer som tillämpar 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 kolumner andra än 'gender' och 'education').
Som standard är det satt till 'drop', vilket innebär att alla icke nämnda kolumner tas bort från datamängden. 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!