Pandas pd.get_dummies() Función
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 es
True, 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 es
True, 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
# 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:
- La Series original contiene tres colores: red, blue, green.
- Después de la codificación one-hot, cada color se convierte en una columna, utilizando
True/Falsepara indicar si la fila pertenece a esa categoría. - Cada fila tiene exactamente un
True, 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
# 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:
- Usando
columnsel parámetro especifica que solo secityydepartmentcodifiquen las columnas. - Las columnas numéricas
agey las columnas de textonamepermanecen sin cambios. - Los nombres de las columnas recién generadas usan el separador predeterminado, el guion bajo, como
city_Beijing。
Ejemplo 3: Prefijo y separador personalizados
Se puede usarprefixyprefix_sepel parámetro para personalizar los nombres de las nuevas columnas.
# 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 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.
Funciones comunes de Pandas