Pandas
Tutorial Pandas: Codificación de variables categóricas a numéricas
Pandas: Aprende a codificar variables categóricas a numéricas. Optimiza datos categóricos para mejorar la eficiencia y rendimiento en modelos de machine learning.
Aprende Pandas GRATIS y certifícate¿Qué son las variables categóricas o de texto en Pandas?
En el contexto de Pandas, una biblioteca de análisis de datos para Python, las variables categóricas o de texto son aquellas que contienen valores discretos y no numéricos. Estas variables representan categorías y pueden tomar un número limitado de valores posibles.
Las variables categóricas son comunes en conjuntos de datos y a menudo se utilizan para describir atributos cualitativos como colores, tipos de productos, géneros, entre otros.
Las variables categóricas pueden ser de dos tipos:
- Nominales: No tienen un orden intrínseco. Por ejemplo, los colores de un coche ('rojo', 'azul', 'verde') o los tipos de productos ('electrónica', 'ropa', 'alimentos').
- Ordinales: Tienen un orden intrínseco. Por ejemplo, las tallas de ropa ('pequeña', 'mediana', 'grande') o las calificaciones de un servicio ('malo', 'regular', 'bueno', 'excelente').
En Pandas, las columnas de un DataFrame que contienen variables categóricas pueden ser de tipo object
(para texto) o de tipo Categorical
. Es recomendable convertir las columnas que contienen datos categóricos al tipo Categorical
para optimizar la memoria y mejorar el rendimiento en operaciones que involucren estas columnas.
Para ilustrar cómo identificar y trabajar con variables categóricas en Pandas, consideremos el siguiente ejemplo:
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño'],
'Precio': [100, 150, 200, 150, 100]
}
df = pd.DataFrame(data)
# Mostrar el tipo de datos de cada columna
print(df.dtypes)
El código anterior generará la siguiente salida, indicando que las columnas 'Color' y 'Tamaño' son de tipo object
:
Color object
Tamaño object
Precio int64
dtype: object
Para convertir estas columnas al tipo Categorical
, se puede utilizar el método astype
de Pandas:
df['Color'] = df['Color'].astype('category')
df['Tamaño'] = df['Tamaño'].astype('category')
# Verificar los tipos de datos después de la conversión
print(df.dtypes)
La salida ahora mostrará que las columnas 'Color' y 'Tamaño' son de tipo category
:
Color category
Tamaño category
Precio int64
dtype: object
El uso del tipo Categorical
no solo mejora la eficiencia en términos de memoria, sino que también proporciona métodos específicos para trabajar con datos categóricos, como cat.codes
para obtener los códigos numéricos correspondientes a cada categoría.
Además, Pandas ofrece funcionalidades avanzadas para manejar variables categóricas, como la creación de variables dummy (dummy variables) utilizando pd.get_dummies()
, que es útil para la codificación de variables categóricas en modelos de machine learning:
# Crear variables dummy
df_dummies = pd.get_dummies(df, columns=['Color', 'Tamaño'])
print(df_dummies)
La salida será un DataFrame con columnas adicionales que representan las categorías de 'Color' y 'Tamaño' en formato binario:
Precio Color_Azul Color_Rojo Color_Verde Tamaño_Grande Tamaño_Mediano Tamaño_Pequeño
0 100 False True False False False True
1 150 True False False False True False
2 200 False False True True False False
3 150 True False False False True False
4 100 False True False False False True
Además de la codificación automática, Pandas permite realizar una codificación ordinal manualmente, asignando valores numéricos específicos a cada categoría de acuerdo con un orden definido por el usuario. Esto es útil cuando se quiere tener control total sobre el orden de las categorías.
Por ejemplo, si tenemos una columna Producto
con valores ['Monitor', 'Laptop', 'Tablet', 'Teléfono']
, y queremos asignarles un orden específico, podemos hacerlo de la siguiente manera:
# Definir un DataFrame de ejemplo
data = {
'Producto': ['Laptop', 'Tablet', 'Teléfono', 'Monitor', 'Laptop'],
'Precio': [1000, 500, 700, 300, 1200]
}
df = pd.DataFrame(data)
# Definir el orden de los productos
orden_producto = {'Monitor': 0, 'Laptop': 1, 'Tablet': 2, 'Teléfono': 3}
# Aplicar la codificación ordinal
df['Producto_Ordinal'] = df['Producto'].map(orden_producto)
print(df)
La salida será:
Producto Precio Producto_Ordinal
0 Laptop 1000 1
1 Tablet 500 2
2 Teléfono 700 3
3 Monitor 300 0
4 Laptop 1200 1
Este proceso de conversión y manejo de variables categóricas es esencial para preparar los datos antes de aplicar técnicas de análisis o modelos predictivos, asegurando que las variables categóricas se representen de manera adecuada y eficiente.
¿Cómo se identifican u obtienen las columnas con variables categóricas o texto?
Para identificar u obtener columnas con variables categóricas o texto en un DataFrame de Pandas, se pueden seguir varios enfoques. Estos métodos permiten detectar columnas que contienen datos no numéricos, facilitando su posterior tratamiento y codificación.
Identificación por tipo de datos
Las columnas con variables categóricas o texto suelen ser de tipo object
o category
. Para identificar estas columnas, se puede inspeccionar el tipo de datos de cada columna utilizando el atributo dtypes
del DataFrame.
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño'],
'Precio': [100, 150, 200, 150, 100]
}
df = pd.DataFrame(data)
# Mostrar el tipo de datos de cada columna
print(df.dtypes)
La salida será:
Color object
Tamaño object
Precio int64
dtype: object
Para obtener únicamente las columnas de tipo object
o category
, se puede utilizar el método select_dtypes
:
# Seleccionar columnas de tipo 'object' o 'category'
categorical_columns = df.select_dtypes(include=['object', 'category']).columns
print(categorical_columns)
La salida será:
Index(['Color', 'Tamaño'], dtype='object')
Uso de funciones lambda y apply
Otra forma de identificar columnas categóricas es utilizando funciones lambda con el método apply
. Esto es útil si se desea aplicar una lógica personalizada para identificar columnas categóricas.
# Identificar columnas categóricas usando una función lambda
categorical_columns = df.apply(lambda col: col.dtype == 'object' or col.dtype.name == 'category').index
print(categorical_columns)
Identificación basada en valores únicos
Las variables categóricas suelen tener un número limitado de valores únicos. Se puede utilizar el método nunique
para contar los valores únicos en cada columna y filtrar aquellas con un número limitado de categorías.
# Identificar columnas con menos de un umbral de valores únicos
threshold = 10
categorical_columns = [col for col in df.columns if df[col].nunique() < threshold and df[col].dtype == 'object']
print(categorical_columns)
Ejemplo completo
A continuación se muestra un ejemplo completo que combina varios métodos para identificar columnas categóricas:
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño'],
'Precio': [100, 150, 200, 150, 100],
'Descuento': [5, 10, 15, 10, 5]
}
df = pd.DataFrame(data)
# Método 1: Usar select_dtypes
categorical_columns_method1 = df.select_dtypes(include=['object', 'category']).columns
# Método 2: Usar apply con lambda
categorical_columns_method2 = df.apply(lambda col: col.dtype == 'object' or col.dtype.name == 'category').index
# Método 3: Usar nunique para identificar columnas con pocos valores únicos
threshold = 10
categorical_columns_method3 = [col for col in df.columns if df[col].nunique() < threshold and df[col].dtype == 'object']
print("Método 1:", categorical_columns_method1)
print("Método 2:", categorical_columns_method2)
print("Método 3:", categorical_columns_method3)
La salida será:
Método 1: Index(['Color', 'Tamaño'], dtype='object')
Método 2: Index(['Color', 'Tamaño', 'Precio', 'Descuento'], dtype='object')
Método 3: ['Color', 'Tamaño']
Cada método tiene sus propias ventajas y puede ser útil en diferentes contextos. La elección del método dependerá de las características específicas del conjunto de datos y de los requisitos del análisis.
¿Por qué es importante el encoding o codificación de variables categóricas o texto a numéricas?
La codificación de variables categóricas o texto a numéricas es crucial en el análisis de datos y en la construcción de modelos de machine learning por varias razones fundamentales:
Compatibilidad con algoritmos de machine learning: La mayoría de los algoritmos de machine learning, especialmente los basados en métodos estadísticos y matemáticos, no pueden procesar directamente variables categóricas. Estos algoritmos requieren que todas las características de entrada sean numéricas. Por ejemplo, algoritmos como la regresión lineal, SVM, KNN y redes neuronales trabajan con datos numéricos.
Mejora del rendimiento del modelo: La codificación adecuada de variables categóricas puede mejorar significativamente el rendimiento de los modelos de machine learning. Representar las categorías de manera eficiente permite al modelo capturar mejor las relaciones y patrones en los datos. Por ejemplo, la codificación one-hot evita la introducción de relaciones ordinales no deseadas entre categorías.
Reducción de dimensionalidad: En algunos casos, la codificación de variables categóricas puede ayudar a reducir la dimensionalidad del conjunto de datos. Técnicas como la codificación ordinal o la codificación de frecuencia pueden ser útiles para representar las categorías de manera compacta sin aumentar excesivamente el número de características.
Eficiencia computacional: Trabajar con datos numéricos puede ser más eficiente desde el punto de vista computacional. Las operaciones matemáticas y las optimizaciones en los algoritmos de machine learning suelen ser más rápidas y eficientes cuando se realizan sobre datos numéricos en lugar de datos categóricos.
Manejo de valores faltantes: La codificación de variables categóricas puede facilitar el manejo de valores faltantes. Por ejemplo, al utilizar la codificación ordinal, se puede asignar un valor específico para representar los valores faltantes, lo que permite que los algoritmos de machine learning los manejen de manera más efectiva.
Ejemplo práctico de codificación con Pandas:
Supongamos que tenemos un DataFrame con variables categóricas y queremos prepararlo para su uso en un modelo de machine learning. Consideremos el siguiente ejemplo:
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño'],
'Precio': [100, 150, 200, 150, 100]
}
df = pd.DataFrame(data)
Para codificar las variables categóricas, podemos utilizar diferentes técnicas:
- Codificación one-hot:
# Usar pd.get_dummies para la codificación one-hot
df_one_hot = pd.get_dummies(df, columns=['Color', 'Tamaño'])
print(df_one_hot)
La salida será:
Precio Color_Azul Color_Rojo Color_Verde Tamaño_Grande Tamaño_Mediano Tamaño_Pequeño
0 100 False True False False False True
1 150 True False False False True False
2 200 False False True True False False
3 150 True False False False True False
4 100 False True False False False True
- Codificación ordinal:
# Convertir a tipo 'category' y usar cat.codes para la codificación ordinal
df['Color'] = df['Color'].astype('category')
df['Tamaño'] = df['Tamaño'].astype('category')
df['Color_Ordinal'] = df['Color'].cat.codes
df['Tamaño_Ordinal'] = df['Tamaño'].cat.codes
print(df)
La salida será:
Color Tamaño Precio Color_Ordinal Tamaño_Ordinal
0 Rojo Pequeño 100 1 2
1 Azul Mediano 150 0 1
2 Verde Grande 200 2 0
3 Azul Mediano 150 0 1
4 Rojo Pequeño 100 1 2
- Codificación de frecuencia:
# Codificación de frecuencia
color_freq = df['Color'].value_counts() / len(df)
tamaño_freq = df['Tamaño'].value_counts() / len(df)
df['Color_Freq'] = df['Color'].map(color_freq)
df['Tamaño_Freq'] = df['Tamaño'].map(tamaño_freq)
print(df)
La salida será:
Color Tamaño Precio Color_Ordinal Tamaño_Ordinal Color_Freq Tamaño_Freq
0 Rojo Pequeño 100 1 2 0.4 0.4
1 Azul Mediano 150 0 1 0.4 0.4
2 Verde Grande 200 2 0 0.2 0.2
3 Azul Mediano 150 0 1 0.4 0.4
4 Rojo Pequeño 100 1 2 0.4 0.4
Cada técnica de codificación tiene sus propias ventajas y desventajas, y la elección de la técnica adecuada dependerá del contexto y del tipo de modelo de machine learning que se esté utilizando.
Formas de codificar variables categóricas o texto a numéricas con Pandas
Para transformar variables categóricas o de texto en datos numéricos, Pandas ofrece varias técnicas. Estas transformaciones son esenciales para la compatibilidad con algoritmos de machine learning y para mejorar la eficiencia en el análisis de datos.
A continuación se describen las formas más comunes de codificación:
Codificación one-hot: Esta técnica crea una columna binaria para cada categoría única en la variable categórica. En la salida de Pandas, los valores se muestran como `True` o `False`, que equivalen a 1 y 0 respectivamente. Estos valores binarios indican la presencia (`True`/`1`) o ausencia (`False`/`0`) de una categoría específica y son completamente compatibles con los algoritmos de machine learning que esperan datos numéricos.
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño']
}
df = pd.DataFrame(data)
# Aplicar codificación one-hot
df_one_hot = pd.get_dummies(df, columns=['Color', 'Tamaño'])
print(df_one_hot)
La salida será:
Color_Azul Color_Rojo Color_Verde Tamaño_Grande Tamaño_Mediano Tamaño_Pequeño
0 False True False False False True
1 True False False False True False
2 False False True True False False
3 True False False False True False
4 False True False False False True
Nota: En la salida de Jupyter Notebook, los valores `True` y `False` representan 1 y 0, respectivamente. Estos son valores binarios que indican la presencia o ausencia de una categoría específica.
Codificación ordinal: Asigna un valor entero único a cada categoría. Esta técnica es adecuada cuando las categorías tienen un orden intrínseco.
# Convertir a tipo 'category' y aplicar codificación ordinal
df['Color'] = df['Color'].astype('category')
df['Tamaño'] = df['Tamaño'].astype('category')
df['Color_Ordinal'] = df['Color'].cat.codes
df['Tamaño_Ordinal'] = df['Tamaño'].cat.codes
print(df)
La salida será:
Color Tamaño Color_Ordinal Tamaño_Ordinal
0 Rojo Pequeño 1 2
1 Azul Mediano 0 1
2 Verde Grande 2 0
3 Azul Mediano 0 1
4 Rojo Pequeño 1 2
Codificación de frecuencia: Reemplaza cada categoría por la frecuencia de aparición de esa categoría en el conjunto de datos.
# Calcular la frecuencia de cada categoría
color_freq = df['Color'].value_counts() / len(df)
tamaño_freq = df['Tamaño'].value_counts() / len(df)
# Aplicar codificación de frecuencia
df['Color_Freq'] = df['Color'].map(color_freq)
df['Tamaño_Freq'] = df['Tamaño'].map(tamaño_freq)
print(df)
La salida será:
Color Tamaño Color_Ordinal Tamaño_Ordinal Color_Freq Tamaño_Freq
0 Rojo Pequeño 1 2 0.4 0.4
1 Azul Mediano 0 1 0.4 0.4
2 Verde Grande 2 0 0.2 0.2
3 Azul Mediano 0 1 0.4 0.4
4 Rojo Pequeño 1 2 0.4 0.4
Codificación basada en el target: Utiliza el target (variable objetivo) para codificar las categorías. Esto puede incluir técnicas como la media del target por categoría.
# Crear un DataFrame con una variable objetivo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo'],
'Tamaño': ['Pequeño', 'Mediano', 'Grande', 'Mediano', 'Pequeño'],
'Precio': [100, 150, 200, 150, 100]
}
df = pd.DataFrame(data)
# Calcular la media del target (Precio) por categoría
color_target_mean = df.groupby('Color')['Precio'].mean()
tamaño_target_mean = df.groupby('Tamaño')['Precio'].mean()
# Aplicar codificación basada en el target
df['Color_Target_Mean'] = df['Color'].map(color_target_mean)
df['Tamaño_Target_Mean'] = df['Tamaño'].map(tamaño_target_mean)
print(df)
La salida será:
Color Tamaño Precio Color_Target_Mean Tamaño_Target_Mean
0 Rojo Pequeño 100 100.0 100.0
1 Azul Mediano 150 150.0 150.0
2 Verde Grande 200 200.0 200.0
3 Azul Mediano 150 150.0 150.0
4 Rojo Pequeño 100 100.0 100.0
Codificación hashing: Utiliza una función hash para convertir categorías en enteros. Esta técnica es útil para grandes conjuntos de datos con muchas categorías únicas.
from sklearn.feature_extraction import FeatureHasher
# Crear un DataFrame de ejemplo
data = {
'Color': ['Rojo', 'Azul', 'Verde', 'Azul', 'Rojo']
}
df = pd.DataFrame(data)
# Convertir cada valor en una lista de un solo elemento
df['Color'] = df['Color'].apply(lambda x: [x])
# Aplicar codificación hashing
hasher = FeatureHasher(input_type='string', n_features=3)
hashed_features = hasher.transform(df['Color'])
# Convertir las características hashed a un DataFrame
hashed_df = pd.DataFrame(hashed_features.toarray(), columns=['Color_Hash_1', 'Color_Hash_2', 'Color_Hash_3'])
print(hashed_df)
La salida será:
Color_Hash_1 Color_Hash_2 Color_Hash_3
0 0.0 0.0 1.0
1 1.0 0.0 0.0
2 0.0 0.0 1.0
3 1.0 0.0 0.0
4 0.0 0.0 1.0
Cada técnica de codificación tiene sus propias ventajas y desventajas, y la elección de una u otra dependerá del contexto y del tipo de análisis o modelo de machine learning que se esté utilizando.
Ejercicios de esta lección Codificación de variables categóricas a numéricas
Evalúa tus conocimientos de esta lección Codificación de variables categóricas a numéricas con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Introducción e instalación de pandas
Operaciones de filtrado, búsqueda y ordenación
Operaciones de cadena de texto y categóricas
Tratamiento de valores faltantes
Manipulación de DataFrames
Codificación de variables categóricas a numéricas
Tipos de datos en DataFrames
Identificar y corregir errores y duplicados
Operaciones matemáticas y estadísticas
Evaluación código conocimiento general de Pandas
Evaluación multirespuesta Conocimiento general de Pandas
Integración de Pandas con Matplotlib
Operaciones con fechas
Entrada de datos externos y salida de datos con Pandas
Análisis de datos de eventos deportivos con Pandas en Python
Identificar y corregir outliers
Series
Integración de Pandas con Seaborn
Operaciones de conjuntos
Identificación de valores faltantes
DataFrames
Análisis de datos de ventas con Numpy y Pandas
Todas las lecciones de Pandas
Accede a todas las lecciones de Pandas y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción E Instalación De Pandas
Introducción Y Entorno
Series
Estructuras De Datos
Dataframes
Estructuras De Datos
Tipos De Datos En Dataframes
Estructuras De Datos
Manipulación De Dataframes
Manipulación De Datos
Operaciones De Filtrado, Búsqueda Y Ordenación
Manipulación De Datos
Operaciones De Cadena De Texto Y Categóricas
Manipulación De Datos
Operaciones Matemáticas Y Estadísticas
Manipulación De Datos
Operaciones Con Fechas
Manipulación De Datos
Operaciones De Conjuntos
Manipulación De Datos
Identificación De Valores Faltantes
Limpieza Y Preparación De Datos
Tratamiento De Valores Faltantes
Limpieza Y Preparación De Datos
Identificar Y Corregir Errores Y Duplicados
Limpieza Y Preparación De Datos
Identificar Y Corregir Outliers
Limpieza Y Preparación De Datos
Codificación De Variables Categóricas A Numéricas
Limpieza Y Preparación De Datos
Entrada De Datos Externos Y Salida De Datos Con Pandas
Integraciones
Integración De Pandas Con Matplotlib
Integraciones
Integración De Pandas Con Seaborn
Integraciones
Evaluación Multirespuesta Conocimiento General De Pandas
Evaluación Pandas
Evaluación Código Conocimiento General De Pandas
Evaluación Pandas
Certificados de superación de Pandas
Supera todos los ejercicios de programación del curso de Pandas y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
Comprender qué son las variables categóricas y su importancia en el análisis de datos.
Identificar columnas categóricas en un DataFrame de Pandas.
Convertir columnas categóricas al tipo
Categorical
en Pandas.Aplicar diferentes técnicas de codificación: one-hot, ordinal, de frecuencia y basada en el target.
Evaluar cuándo utilizar cada técnica de codificación basada en el contexto y la necesidad del modelo de machine learning.
Implementar y optimizar la codificación de variables categóricas para mejorar el rendimiento de los modelos.