Pandas pd.get_dummies() Funktion
pd.get_dummies()Es ist eine Pandas-Bibliotheksfunktion, die fürOne-Hot-Encoding kategorialer Variablenverwendet wird. Sie wandelt kategoriale Variablen in binäre (0/1)-Spalten um, wobei jede Kategorie einer Spalte entspricht.
One-Hot-Encoding ist eine gängige Technik im Preprocessing des maschinellen Lernens, da die meisten Algorithmen kategoriale Daten nicht direkt verarbeiten können und sie in numerische Form umwandeln müssen.
Worterklärung: get_dummiesHier bedeutet "dummy" "Dummy-Variable", was sich auf binäre Variablen bezieht, die in Statistik und Ökonometrie verwendet werden, um kategoriale Variablen darzustellen.
Grundlegende Syntax und Parameter
pd.get_dummies()Es ist eine Top-Level-Funktion in der Pandas-Bibliothek, die verwendet wird, um kategoriale Variablen in das One-Hot-Encoding-Format umzuwandeln.
Syntaxformat
pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, drop_first=False, dtype=None)
Parameterbeschreibung
- Parameter:
data- Typ: Series, DataFrame oder array-ähnliches Objekt.
- Beschreibung: Die Daten, die one-hot-codiert werden sollen. Normalerweise eine Series oder ein DataFrame, das kategoriale Variablen enthält.
- Parameter:
prefix- Typ: String, Liste von Strings oder Dictionary.
- Beschreibung: Das Präfix für die generierten neuen Spaltennamen. Wenn nicht angegeben, werden die ursprünglichen Spaltennamen als Präfix verwendet.
- Parameter:
prefix_sep- Typ: String.
- Beschreibung: Das Trennzeichen zwischen dem Präfix und dem Kategorienamen. Standardwert ist der Unterstrich
'_'。
- Parameter:
dummy_na- Typ: Boolean.
- Beschreibung: Wenn
True, außerdem wird eine separate Spalte für fehlende Werte (NaN) erstellt. StandardmäßigFalse。
- Parameter:
columns- Typ: Liste oder None.
- Beschreibung: Die Spaltennamen, die codiert werden sollen. Wenn nicht angegeben, werden alle Spalten vom Typ object, category oder boolean codiert.
- Parameter:
drop_first- Typ: Boolean.
- Beschreibung: Wenn
True, wird die erste Spalte jeder kategorialen Variable entfernt, um Multikollinearität zu vermeiden. In Modellen wie der logistischen Regression kann dadurch die Dummy-Variable-Falle vermieden werden. StandardmäßigFalse。
Funktionsbeschreibung
- Rückgabewert: Gibt ein DataFrame zurück, bei dem jede Spalte einer Kategorie entspricht und die Werte 0 oder 1 sind.
- Auswirkung: Wandelt kategoriale Variablen in numerische binäre Spalten um, was es Algorithmen für maschinelles Lernen erleichtert, sie zu verarbeiten.
Beispiele
Lass uns anhand einer Reihe von Beispielen von einfach bis komplex gründlichpd.get_dummies()die Verwendung von pd.get_dummies() beherrschen.
Beispiel 1: Grundlegende Verwendung – One-Hot-Encoding einer Series
Beispiel
# 1. Erstelle eine Series mit kategorialen Variablen
colors = pd.Series(['red', 'blue', 'green', 'red', 'green', 'blue'])
print("=== Ursprüngliche Series ===")
print(colors)
# 2. Verwende pd.get_dummies() für One-Hot-Kodierung
result = pd.get_dummies(colors)
print("\n"=== pd.get_dummies() Ergebnis der One-Hot-Kodierung ===")
print(result)
Erwartete Ausgabe:
=== 原始 Series ===
0 red
1 blue
2 green
3 red
4 green
5 blue
dtype: object
=== pd.get_dummies() 独热编码结果 ===
blue green red
0 False False True
1 True False False
2 False True False
3 False False True
4 False True False
5 True False False
Code-Erklärung:
- Die ursprüngliche Series enthält drei Farben: red, blue, green.
- Nach der One-Hot-Kodierung wird jede Farbe zu einer Spalte, wobei
True/Falseangegeben wird, ob die Zeile zu dieser Kategorie gehört. - Jede Zeile hat genau eine
True, die dem ursprünglichen Farbwert entspricht.
Beispiel 2: Kodierung bestimmter Spalten eines DataFrames
In der Datenanalyse müssen oft nur bestimmte kategoriale Spalten kodiert werden, während numerische Spalten unverändert bleiben.
Beispiel
# 1. Erstelle ein DataFrame mit numerischen und kategorialen Variablen
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
'age': [25, 30, 35, 28],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou'],
'department': ['Vertrieb', 'Technik', 'Vertrieb', 'HR']
})
print("=== Ursprüngliches DataFrame ===")
print(df)
# 2. One-Hot-Encoding für die angegebenen kategorischen Spalten durchführen
result = pd.get_dummies(df, columns=['city', 'department'])
print("\n"=== One-Hot-Encoding für die Spalten city und department ===")
print(result)
Erwartete Ausgabe:
=== 原始 DataFrame ===
name age city department
0 Alice 25 Beijing Sales
1 Bob 30 Shanghai Engineering
2 Charlie 35 Beijing Sales
3 Diana 28 Guangzhou HR
=== 对 city 和 department 列进行独热编码 ===
name age city_Beijing city_Guangzhou city_Shanghai department_Engineering department_HR department_Sales
0 Alice 25 True False False False True
1 Bob 30 False False True True False
2 Charlie 35 True False False False True
3 Diana 28 False True False False False
Code-Erklärung:
- Verwenden Sie die
columnsParameter, um anzugeben, dass nur diecityunddepartmentSpalten kodiert werden. - Numerische Spalten
ageund Textspaltennamebleiben unverändert. - Die neu generierten Spaltennamen verwenden den Standardseparator Unterstrich, wie z. B.
city_Beijing。
Beispiel 3: Benutzerdefiniertes Präfix und Trennzeichen
Sie können dieprefixundprefix_sepParameter, um die Namen neuer Spalten anzupassen.
# 1. DataFrame erstellen
df = pd.DataFrame({
'color': ['red', 'blue', 'green', 'red'],
'size': ['S', 'M', 'L', 'XL']
})
print("=== Ursprüngliches DataFrame ===")
print(df)
# 2. Verwende den Parameter prefix, um das Präfix anzupassen
result_prefix = pd.get_dummies(df, prefix=['color', 'size'])
print("\n"=== Benutzerdefiniertes Präfix wird verwendet ===")
print(result_prefix)
# 3. Verwende prefix_sep, um das Trennzeichen anzupassen
result_sep = pd.get_dummies(df, prefix=['color', 'size'], prefix_sep='-')
print("\n"=== Benutzerdefiniertes Trennzeichen '-' wird verwendet ===")
print(result_sep)
Erwartete Ausgabe:
=== 原始 DataFrame === color size 0 red S 1 blue M 2 green L 3 red XL === 使用自定义前缀 === color_blue color_green color_red size_L size_M size_S size_XL 0 False False True False False True False 1 True False False False True False False 2 False True False True False False False 3 False False True False False False True === 使用自定义分隔符 '-' === color-blue color-green color-red size-L ...
Code-Erklärung:
prefix=['color', 'size']Geben Sie für verschiedene Spalten unterschiedliche Präfixe an.prefix_sep='-'Ändern Sie den standardmäßigen Unterstrich in einen Bindestrich, und die neuen Spaltennamen nehmencolor-reddiese Form an.
Beispiel 4: Umgang mit fehlenden Werten und dem drop_first-Parameter
Beispiel
import numpy as np
# 1. Daten mit fehlenden Werten
df = pd.DataFrame({
'color': ['red', 'blue', np.nan, 'red', 'green'],
'size': ['S', 'M', 'L', np.nan, 'XL']
})
print("=== DataFrame mit fehlenden Werten ===")
print(df)
# 2. Standardmäßig werden fehlende Werte nicht behandelt
result_default = pd.get_dummies(df, columns=['color'])
print("\n"=== Standard: Fehlende Werte werden nicht behandelt ===")
print(result_default)
# 3. dummy_na=True erstellt eine separate Spalte für fehlende Werte
result_na = pd.get_dummies(df, columns=['color'], dummy_na=True)
print("\n"=== dummy_na=True erstellt eine Spalte für fehlende Werte ===")
print(result_na)
# 4. drop_first=True entfernt die erste Spalte, um Multikollinearität zu vermeiden
result_drop = pd.get_dummies(df, columns=['size'], drop_first=True)
print("\n"=== drop_first=True entfernt die erste Spalte ===")
print(result_drop)
Erwartete Ausgabe:
=== 包含缺失值的 DataFrame === color size 0 red S 1 blue M 2 NaN L 3 red NaN 4 green XL === 默认不处理缺失值 === size color_blue color_green color_red 0 S False False True 1 M True False False 2 L False False False 3 S False False True 4 XL False True False === dummy_na=True 为缺失值创建列 === size color_True color_blue color_green color_red 0 S False False False True 1 M False True False False 2 L True False False False 3 S False False False True 4 XL False False True False === drop_first=True 删除第一列 === color_blue color_green color_red 0 False False True 1 True False False 2 False False False 3 False False True 4 False True False
Code-Erklärung:
dummy_na=TrueErstellen Sie eine zusätzliche Spalte für fehlende Werte (in diesem Beispiel als Spalte color_True dargestellt).drop_first=TrueDas Entfernen der ersten Spalte jeder Gruppe (z. B. size_M wird entfernt) kann Multikollinearitätsprobleme in linearen Modellen vermeiden.
Tipp:One-Hot-Encoding erhöht die Dimensionalität der Daten (eine Spalte pro Kategorie). Wenn die Anzahl der Kategorien sehr groß ist, kann dies zum Fluch der Dimensionalität führen. In solchen Fällen können Sie die Verwendung von Label-Encoding (
pd.factorize()) oder andere Kodierungsmethoden.
Gängige Pandas-Funktionen