(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo hacer one-hot encoding de datos categóricos en Python

João Barros 06 de July de 2026 4 min de lectura

El one-hot encoding es la forma más común de transformar datos categóricos — valores de texto sin número propio, como nombres de colores — en columnas numéricas que un modelo de Machine Learning pueda usar. La mayoría de los algoritmos, desde la regresión hasta los árboles de decisión, solo trabajan con números. Si dejamos las categorías como texto, el entrenamiento falla; si las sustituimos por 1, 2 y 3, creamos un orden falso entre ellas. El one-hot encoding resuelve ambos problemas a la vez y es sencillo de aplicar en Python con scikit-learn.

Requisitos previos

  • Python 3.8 o superior instalado.
  • Las librerías scikit-learn y pandas.
  • Conocer lo básico de los DataFrames de pandas.
  • Un conjunto de datos con al menos una columna de texto (categórica).

Paso 1: Entender el problema

Imagina una tabla con una columna "cor" (color). Los valores "azul", "verde" y "vermelho" (azul, verde y rojo) no tienen significado matemático, y no podemos simplemente cambiarlos por 1, 2 y 3 — eso haría que el modelo pensara que "vermelho" (3) es mayor que "azul" (1), lo que no tiene sentido. Vamos a crear este ejemplo:

import pandas as pd

df = pd.DataFrame({
    "cor": ["azul", "verde", "vermelho", "azul"],
    "preco": [10, 15, 20, 12]
})
print(df)

La columna cor es categórica; la columna preco ya es numérica y no necesita tratamiento.

Paso 2: Importar el OneHotEncoder

scikit-learn incluye una clase lista para esta tarea: el OneHotEncoder. Si aún no tienes las librerías, instálalas en la terminal con pip install scikit-learn pandas. Luego importa el codificador en tu script:

from sklearn.preprocessing import OneHotEncoder

Paso 3: Aplicar el one-hot encoding

Creamos el codificador y lo aplicamos a la columna categórica. El parámetro sparse_output=False devuelve un array normal (más fácil de leer) y handle_unknown="ignore" evita errores si más adelante aparecen categorías que el codificador no vio durante el entrenamiento.

encoder = OneHotEncoder(sparse_output=False, handle_unknown="ignore")

codificado = encoder.fit_transform(df[["cor"]])
print(codificado)

El método fit_transform hace dos cosas: aprende qué categorías existen (fit) y las transforma en números (transform). El resultado es una matriz en la que cada categoría pasa a ser una columna con valores 0 o 1. Cada fila tiene un único 1 — de ahí el nombre "one-hot".

Paso 4: Unir las columnas al DataFrame

La matriz por sí sola es poco legible. Vamos a darle nombres de columnas con get_feature_names_out() y unirla al DataFrame original, eliminando la columna de texto:

nomes = encoder.get_feature_names_out(["cor"])
df_codificado = pd.DataFrame(codificado, columns=nomes)

resultado = pd.concat([df.drop(columns=["cor"]), df_codificado], axis=1)
print(resultado)

Ahora tienes un DataFrame totalmente numérico, con columnas como cor_azul, cor_verde y cor_vermelho, listo para entrenar un modelo.

Paso 5: Alternativa rápida con pandas

Para una exploración rápida, pandas ofrece get_dummies, que hace lo mismo en una sola línea:

resultado_rapido = pd.get_dummies(df, columns=["cor"])
print(resultado_rapido)

Es muy práctico para análisis puntuales. Aun así, en proyectos de Machine Learning el OneHotEncoder es preferible, porque memoriza las categorías vistas durante el entrenamiento y aplica exactamente las mismas a los datos de prueba, evitando columnas diferentes entre conjuntos. Consejo: para evitar redundancia entre columnas, puedes usar OneHotEncoder(drop="first"), que elimina la primera categoría.

Comprobar el resultado

Confirma que el DataFrame final ya no contiene texto: todas las columnas deben ser numéricas. Deberías ver una columna por cada color distinto, con 0 o 1 en cada fila. Una buena comprobación es sumar cada fila de las columnas de color — el total debe ser siempre 1, porque cada registro pertenece a exactamente una categoría. Pruébalo con df_codificado.sum(axis=1) y confirma que todos los valores son 1.

Conclusión

Acabas de convertir datos categóricos en columnas numéricas con one-hot encoding, usando el OneHotEncoder de scikit-learn y la alternativa get_dummies de pandas. El siguiente paso natural es integrar este codificador en un Pipeline, para aplicar el preprocesamiento y el entrenamiento del modelo de una sola vez. ¿Qué columnas categóricas de tu conjunto de datos necesitan ser codificadas?