convertir la lista de encabezados y listas de filas en pandas DataFrame

2 minutos de lectura

Avatar de usuario de Joop
Joop

Estoy leyendo el contenido de una hoja de cálculo en pandas. DataNitro tiene un método que devuelve una selección rectangular de celdas como una lista de listas. Entonces

table = Cell("A1").table

da

table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

headers = table.pop(0) # gives the headers as list and leaves data

Estoy ocupado escribiendo código para traducir esto, pero creo que es un uso tan simple que debe haber un método para hacerlo. Parece que no puedo encontrarlo en la documentación. ¿Algún consejo sobre el método que simplificaría esto?

Avatar de usuario de EdChum
EdChum

Llama a pd.DataFrame constructor directamente:

df = pd.DataFrame(table, columns=headers)
df

   Heading1  Heading2
0         1         2
1         3         4

  • 2 por 2 es un ejemplo desafortunado. Esperaba que las listas individuales se convirtieran en columnas, pero pandas atraviesa listas y crea columnas

    – usuario1700890

    6 abr a las 17:27

Avatar de usuario de Shoresh
Shoresh

Con el enfoque explicado anteriormente por EdChum, los valores de la lista se muestran como filas. Para mostrar los valores de las listas como columnas en DataFrame, simplemente use transpose() de la siguiente manera:

table = [[1 , 2], [3, 4]]
df = pd.DataFrame(table)
df = df.transpose()
df.columns = ['Heading1', 'Heading2']

La salida entonces es:

      Heading1  Heading2
0         1        3
1         2        4

  • ¿Estás seguro de df = df.transpose() ? Tengo una lista de listas (la lista interna tiene 11 elementos) y las necesito en un marco de datos de pandas de la misma manera, pero para obtener el resultado que está mostrando, omito el transpose.

    – Sinux1

    12 oct 2022 a las 18:28


Avatar de usuario de BENY
beny

Incluso sin pop la lista que podemos hacer con set_index

pd.DataFrame(table).T.set_index(0).T
Out[11]: 
0 Heading1 Heading2
1        1        2
2        3        4

Actualizar from_records

table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

pd.DataFrame.from_records(table[1:],columns=table[0])
Out[58]: 
   Heading1  Heading2
0         1         2
1         3         4

Desde el table ejemplo llamar DataFrame constructor de la siguiente manera:

table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

df = pd.DataFrame(table[1:], columns=table[0])

¿Ha sido útil esta solución?