El caso es el siguiente, tienes un set de datos de pruebas con unas variables categóricas tienen las siguientes características:
pip install pandas
pip install numpy
Ahora usaremos un set de datos de prueba del portal de datos abiertos:
# Datos de prueba
dfDatos = pd.read_csv('https://www.datos.gov.co/api/views/jdjx-jx6d/rows.csv')
Este set de datos tiene un campo "PRODUCTOSELABORADOS" que es el que usaremos para generar una nueva categoría ya que tiene un texto
demasiado largo:
np.select(listaCondiciones,listaOpciones,default=datoPorDefecto)
Esta función tiene estos parámetros:
(dfDatos['PRODUCTOSELABORADOS'].str.contains('LECHE|LACTEO|YOGU|QUES'))
Lo importante es tener presente que la función contains cuando se adiciona el caracter "|" implica que se busca alguno de las cadenas de texto que se ponen, así LECHE|LACTEO quiere decir que buscará si el texto contiene LECHE o LACTEO
Es importante que tanto la lista de condiciones como la de opciones tengan la misma longitud o la función sacará error:
#Condiciones de reemplazo a aplicar
condiciones = [(dfDatos['PRODUCTOSELABORADOS'].str.contains('LECHE|LACTEO|YOGU|QUES')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('MEZCLA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('BEBIDA|AGUA|MALTA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CHOCOLATE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CAFÉ|CAFE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('SALSA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('PAN|TORTA|GALLET')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('HELAD')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('DULC|CARAMELOS|BOCADILLO')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('PASTAS')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('GRANOLA|CEREAL')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CARNE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('GOMA'))]
#Opciones por las que se debe reemplazar cuando cada condición se cumple
opciones = ['LACTEOS','MEZCLAS','BEBIDAS','CHOCOLATE','CAFÉ','SALSAS','PANADERIA','HELADS','DULCES','PASTAS','CEREALES','CARNES','GOMAS']
#Aplicar los cambios en el campo nuevo Grupo
dfDatos['NUEVO_GRUPO']= np.select(condiciones,opciones,default=dfDatos['PRODUCTOSELABORADOS'])
Con este simple proceso podras crear nuevas columnas agrupadas, corregir nombres de categoría mal escritos y en general llevar diferentes datos de una columna de texto a uno solo que necesites para tu análisis. Este código lo puedes copiar y pegar en Jupyter Notebook para que lo puedas probar por completo:
# Importamos las librerías
import numpy as np
import pandas as pd
# Cargamos el dataframe
dfDatos = pd.read_csv('https://www.datos.gov.co/api/views/jdjx-jx6d/rows.csv')
#Validamos los datos
dfDatos['PRODUCTOSELABORADOS']
#Condiciones de reemplazo a aplicar
condiciones = [(dfDatos['PRODUCTOSELABORADOS'].str.contains('LECHE|LACTEO|YOGU|QUES')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('MEZCLA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('BEBIDA|AGUA|MALTA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CHOCOLATE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CAFÉ|CAFE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('SALSA')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('PAN|TORTA|GALLET')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('HELAD')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('DULC|CARAMELOS|BOCADILLO')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('PASTAS')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('GRANOLA|CEREAL')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('CARNE')),
(dfDatos['PRODUCTOSELABORADOS'].str.contains('GOMA'))]
#Opciones por las que se debe reemplazar cuando cada condición se cumple
opciones = ['LACTEOS','MEZCLAS','BEBIDAS','CHOCOLATE','CAFÉ','SALSAS','PANADERIA','HELADS','DULCES','PASTAS','CEREALES','CARNES','GOMAS']
#Aplicar los cambios en el campo nuevo Grupo
dfDatos['NUEVO_GRUPO']= np.select(condiciones,opciones,default=dfDatos['PRODUCTOSELABORADOS'])
# Revisamos el resultado
dfDatos[['PRODUCTOSELABORADOS','NUEVO_GRUPO']]
0 Comentarios