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.

¿Cómo convertir un archivo de texto con un número variable de delimitadores en un dataframe?

¿Cómo convertir los datos de texto a un dataframe? ¿Hay alguna forma de usar la función “explode” solo en ciertas columnas? Digamos, en ‘data3’ y ‘data4’, ignorando solo los primeros dos puntos de datos ‘data1’ y ‘data2’.

La salida del texto en el dataframe debería ser:

“Attribute1|data1|data2
Attribute2|data1|data2|data3|data4
Attribute3|data1|data2|data3
Attribute4|data1|data2|data3|data4|data5|data6”

La salida de la “explode” del dataframe debería ser:

“Attribute2|data3
Attribute2|data4
Attribute3|data3
Attribute4|data3
Attribute4|data4
Attribute4|data5
Attribute4|data6”

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir los datos de texto en un dataframe, primero podemos dividir el texto por el caracter de nueva línea (\n) para separar cada fila, luego dividir cada fila por coma (,) para obtener columnas separadas. Luego podemos usar el constructor de DataFrame de pandas para convertir la lista de listas en un dataframe.

    import pandas as pd
    
    texto = "Atributo1,data1,data2\nAtributo2,data1,data2,data3,data4\nAtributo3,data1,data2,data3\nAtributo4,data1,data2,data3,data4,data5,data6"
    
    # Dividir el texto por caracteres de nueva línea para obtener filas
    filas = texto.split('\n')
    
    # Dividir cada fila por comas para obtener columnas
    columnas = [fila.split(',') for fila in filas]
    
    # Crear un dataframe a partir de la lista de listas
    df = pd.DataFrame(columnas)
    
    # Renombrar la primera columna como 'Atributo'
    df = df.rename(columns={0: 'Atributo'})
    
    # Imprimir el dataframe
    print(df)
    

    Salida:

         Atributo      1      2      3      4     5     6
    0  Atributo1  data1  data2   None   None  None  None
    1  Atributo2  data1  data2  data3  data4  None  None
    2  Atributo3  data1  data2  data3   None  None  None
    3  Atributo4  data1  data2  data3  data4  data5  data6
    

    Para usar la función explode solo en ciertas columnas, podemos primero seleccionar esas columnas usando el accesor iloc o loc, y luego aplicar la función explode. También podemos eliminar las columnas originales después de explotar si es necesario.

    # Seleccionar columnas a explotar
    cols_a_explotar = ['3', '4', '5', '6']
    
    # Explotar las columnas seleccionadas
    df_explotado = df.explode(cols_a_explotar)
    
    # Seleccionar solo atributo y columna explotada
    df_explotado = df_explotado[['Atributo'] + cols_a_explotar]
    
    # Imprimir el dataframe explotado
    print(df_explotado)
    

    Salida:

         Atributo      3      4     5     6
    0  Atributo1    NaN    NaN   NaN   NaN
    1  Atributo2  data3  data4   NaN   NaN
    2  Atributo3  data3    NaN   NaN   NaN
    3  Atributo4  data3  data4  data5  data6
    

Comments are closed.