Pandas pd.get_dummies() Funktion

Pandas 通用函数Gängige Pandas-Funktionen


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: WennTrue, 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: WennTrue, 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

import pandas as pd

# 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:

  1. Die ursprüngliche Series enthält drei Farben: red, blue, green.
  2. Nach der One-Hot-Kodierung wird jede Farbe zu einer Spalte, wobeiTrue/Falseangegeben wird, ob die Zeile zu dieser Kategorie gehört.
  3. Jede Zeile hat genau eineTrue, 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

import pandas as pd

# 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 diecolumnsParameter, um anzugeben, dass nur diecityunddepartmentSpalten kodiert werden.
  • Numerische Spaltenageund 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.

<h2 class="example">Beispiel
import pandas as pd

# 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 pandas as pd
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.

Pandas 常用函数Gängige Pandas-Funktionen