Pandas pd.get_dummies() Función

Pandas 通用函数Funciones comunes de Pandas


pd.get_dummies()es la función de la librería Pandas utilizada paracodificación one-hot de variables categóricas (One-Hot Encoding)La función convierte las variables categóricas en columnas binarias (0/1), donde cada categoría corresponde a una columna.

La codificación one-hot es una técnica común en el preprocesamiento de aprendizaje automático, porque la mayoría de los algoritmos no pueden manejar directamente datos categóricos y es necesario convertirlos a forma numérica.

Significado de la palabra: get_dummiesEn este contexto, 'dummy' significa 'variable ficticia', refiriéndose a una variable binaria que se usa en estadística y econometría para representar variables categóricas.


Sintaxis básica y parámetros

pd.get_dummies()Es una función de nivel superior de la biblioteca Pandas, que se utiliza para convertir variables categóricas al formato de codificación one-hot.

Formato de sintaxis

pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, drop_first=False, dtype=None)

Descripción de parámetros

  • Parámetro: data
    • Tipo: Series, DataFrame o un objeto similar a un arreglo.
    • Descripción: Los datos a los que se les aplica la codificación one-hot. Generalmente son una Series o un DataFrame que contienen variables categóricas.
  • Parámetro: prefix
    • Tipo: Cadena, lista de cadenas o diccionario.
    • Descripción: Prefijo para los nombres de las nuevas columnas generadas. Si no se especifica, se usa el nombre de la columna original como prefijo.
  • Parámetro: prefix_sep
    • Tipo: Cadena.
    • Descripción: El separador entre el prefijo y el nombre de la categoría. El valor predeterminado es el guion bajo'_'。
  • Parámetro: dummy_na
    • Tipo: Booleano.
    • Descripción: Si esTrue, se crea también una columna separada para los valores faltantes (NaN). El valor predeterminado esFalse。
  • Parámetro: columns
    • Tipo: Lista o None.
    • Descripción: Los nombres de las columnas a codificar. Si no se especifica, se codifican todas las columnas de tipo object, category o boolean.
  • Parámetro: drop_first
    • Tipo: Booleano.
    • Descripción: Si esTrue, se elimina la primera columna de cada variable categórica para evitar la multicolinealidad. En modelos como la regresión logística puede evitar la trampa de variables ficticias. El valor predeterminado esFalse。

Descripción de la función

  • Valor de retorno: Devuelve un DataFrame, donde cada columna corresponde a una categoría y los valores son 0 o 1.
  • Efecto: Convierte variables categóricas en columnas binarias numéricas, facilitando el procesamiento por algoritmos de aprendizaje automático.

Ejemplos

Vamos a dominar completamente, a través de una serie de ejemplos de simples a complejos,pd.get_dummies()el uso de.

Ejemplo 1: Uso básico - Codificación one-hot de una Series

Ejemplo

import pandas as pd

# 1. Crear una Series que contenga variables categóricas
colors = pd.Series(['red', 'blue', 'green', 'red', 'green', 'blue'])

print("=== Serie original ===")
print(colors)

# 2. Usar pd.get_dummies() para realizar la codificación one-hot
result = pd.get_dummies(colors)
print("\n=== resultado de codificación one-hot de pd.get_dummies() ===")
print(result)

Resultado esperado:

=== 原始 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

Análisis del código:

  1. La Series original contiene tres colores: red, blue, green.
  2. Después de la codificación one-hot, cada color se convierte en una columna, utilizandoTrue/Falsepara indicar si la fila pertenece a esa categoría.
  3. Cada fila tiene exactamente unTrue, correspondiente al valor de color original.

Ejemplo 2: Codificar columnas específicas de un DataFrame

En el análisis de datos, normalmente solo es necesario codificar columnas categóricas específicas, dejando las columnas numéricas sin cambios.

Ejemplo

import pandas as pd

# 1. Crear un DataFrame que contenga variables numéricas y categóricas
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
    'age': [25, 30, 35, 28],
    'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou'],
    'department': ['Sales', 'Engineering', 'Sales', 'HR']
})

print("=== DataFrame original ===")
print(df)

# 2. Aplicar codificación one-hot a las columnas categóricas especificadas
result = pd.get_dummies(df, columns=['city', 'department'])
print("\n=== Codificación one-hot de las columnas city y department ===")
print(result)

Resultado esperado:

=== 原始 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

Análisis del código:

  • Usandocolumnsel parámetro especifica que solo secityydepartmentcodifiquen las columnas.
  • Las columnas numéricasagey las columnas de textonamepermanecen sin cambios.
  • Los nombres de las columnas recién generadas usan el separador predeterminado, el guion bajo, comocity_Beijing。

Ejemplo 3: Prefijo y separador personalizados

Se puede usarprefixyprefix_sepel parámetro para personalizar los nombres de las nuevas columnas.

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

# 1. Crear un DataFrame
df = pd.DataFrame({
    'color': ['red', 'blue', 'green', 'red'],
    'size': ['S', 'M', 'L', 'XL']
})

print("=== DataFrame original ===")
print(df)

# 2. Usar el parámetro prefix para personalizar el prefijo
result_prefix = pd.get_dummies(df, prefix=['color', 'size'])
print("\n=== Usando prefijo personalizado ===")
print(result_prefix)

# 3. Usar prefix_sep para personalizar el separador
result_sep = pd.get_dummies(df, prefix=['color', 'size'], prefix_sep='-')
print("\n=== Usando el separador personalizado '-' ===")
print(result_sep)

Resultado esperado:

=== 原始 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  ...

Análisis del código:

  • prefix=['color', 'size']Se especifican prefijos diferentes para diferentes columnas.
  • prefix_sep='-'Se cambia el guion bajo predeterminado por un guion corto, y los nombres de las nuevas columnas se convierten encolor-redde esta forma.

Ejemplo 4: Manejo de valores faltantes y el parámetro drop_first

Ejemplo

import pandas as pd
import numpy as np

# 1. Datos que contienen valores faltantes
df = pd.DataFrame({
    'color': ['red', 'blue', np.nan, 'red', 'green'],
    'size': ['S', 'M', 'L', np.nan, 'XL']
})

print("=== DataFrame con valores faltantes ===")
print(df)

# 2. Por defecto no se manejan los valores faltantes
result_default = pd.get_dummies(df, columns=['color'])
print("\n=== Por defecto no se manejan los valores faltantes ===")
print(result_default)

# 3. dummy_na=True crea una columna separada para los valores faltantes
result_na = pd.get_dummies(df, columns=['color'], dummy_na=True)
print("\n=== dummy_na=True crea una columna para los valores faltantes ===")
print(result_na)

# 4. drop_first=True elimina la primera columna para evitar la multicolinealidad
result_drop = pd.get_dummies(df, columns=['size'], drop_first=True)
print("\n=== drop_first=True elimina la primera columna ===")
print(result_drop)

Resultado esperado:

=== 包含缺失值的 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


Análisis del código:

  • dummy_na=TrueSe crea una columna adicional para los valores faltantes (en este ejemplo se muestra como la columna color_True).
  • drop_first=TrueEliminar la primera columna de cada grupo (por ejemplo, size_M se elimina) puede evitar el problema de multicolinealidad en modelos lineales.

Sugerencia:La codificación one-hot aumenta la dimensionalidad de los datos (una columna por categoría). Si el número de categorías es muy grande, puede causar la maldición de la dimensionalidad. En este caso, se puede considerar usar codificación de etiquetas (pd.factorize()) u otros métodos de codificación.

Pandas 常用函数Funciones comunes de Pandas