es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pandas separa una lista en filas y columnas y realiza la codificación one hot.

El formulario en línea de un cliente muestra selecciones de opción múltiple en un solo campo separadas por comas. ¿Existe una forma de separar los valores en columnas y codificarlos de forma binaria (one hot encode) usando pandas?

Datos actuales:

id  | ind
1   | Student, Tourism, Industrial
2   | Residential, Student, Tourism
3   | student, Tourism, Industrial, Education

Cómo quiero que estén los datos:

id          | ind_student| ind_Tourism| ind_Industrial| ind_Residential|  ind_Education
1           | 1          | 1          | 1             | 0              | 0
2           | 1          | 1          | 0             | 1              | 0
3           | 1          | 1          | 1             | 0              | 1

¡Gracias por echarle un vistazo!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer esto utilizando pandas. Aquí hay un fragmento de código que podría lograr el resultado deseado:

    import pandas as pd
    
    # leer los datos
    data = pd.read_csv('data.csv')
    
    # dividir los valores en la columna 'ind' por ',' y crear un nuevo dataframe con cada valor en su propia columna
    indicators = data['ind'].str.split(',', expand=True)
    
    # crear una lista de los valores únicos en todas las columnas
    indicator_values = indicators.stack().unique()
    
    # recorrer los valores únicos y crear una nueva columna para cada uno en el dataframe original
    for value in indicator_values:
        data[value] = indicators.apply(lambda row: 1 if value in row.values else 0, axis=1)
    
    # eliminar la columna original 'ind'
    data.drop('ind', axis=1, inplace=True)
    

    Este código primero lee los datos de un archivo csv (reemplaza ‘data.csv’ por el nombre del archivo que contiene tus datos). Luego utiliza el método str.split() para dividir los valores en la columna ‘ind’ por ‘,’ y crear un nuevo dataframe con cada valor en su propia columna.

    A continuación, crea una lista de los valores únicos en todas las columnas. Luego recorre esta lista y crea una nueva columna para cada valor en el dataframe original. El método apply() se utiliza con una función lambda para asignar un 1 o 0 a cada fila según si el valor está presente en las columnas de indicadores de esa fila.

    Finalmente, elimina la columna original ‘ind’ y el dataframe resultante debería tener el formato deseado.

Comments are closed.