Pandas: Cómo convertir un Dataframe en una lista de listas por filas o columnas

Publicado el 26 abril 2021 por Daniel Rodríguez @analyticslane

En esta entrada vamos a ver cómo se puede convertir fácilmente el contenido de un DataFrame en una lista, realizando el proceso tanto por filas como por columnas. Un truco con el que se puede cambiar el tipo de dato en función de nuestras necesidades.

Creación de un DataFrame de ejemplo

En primer lugar, es necesario disponer de un DataFrame, a ser posible pequeño para ver mejor los resultados, por lo que vamos a crear una manualmente como ya hemos hecho en otras ocasiones. Para lo que se puede utilizar el siguiente código.

import pandas as pd

users = {'first_name': ['Montgomery', 'Dagmar', 'Reeba', 'Shalom', 'Broddy', 'Aurelia'],
         'last_name': ['Humes', 'Elstow', 'Wattisham', 'Alen', 'Keningham', 'Brechin'],
         'age': [27, 41, 29, 29, 21, 33],
         'gender': ['Male', 'Female', 'Female', 'Male', 'Male', 'Female']}

df = pd.DataFrame(users)
   first_name  last_name  age  gender
0  Montgomery      Humes   27    Male
1      Dagmar     Elstow   41  Female
2       Reeba  Wattisham   29  Female
3      Shalom       Alen   29    Male
4      Broddy  Keningham   21    Male
5     Aurelia    Brechin   33  Female

Convertir un Dataframe en una lista por filas

Obtener una lista de Python a partir de un DataFrames de Pandas requiere realizar un par de pasos. Los DataFrames de Pandas no disponen de un método para obtener una lista con su contenido directamente, pero sí que disponen de un método para generar un array de NumPy. En los cuales existe un método para obtener una lista. Así es posible convertir un Dataframe en una lista por filas solamente con el siguiente código

df.to_numpy().tolist()

En el que simplemente se ha encadenado el método del DataFrame to_numpy(), con el que convierte un DataFrame en un objeto de NumPy, con el método de los array de NumPy tolist(), con el que se convierte un array de NumPy en una lista. Obteniendo el siguiente resultado.

[['Montgomery', 'Humes', 27, 'Male'],
 ['Dagmar', 'Elstow', 41, 'Female'],
 ['Reeba', 'Wattisham', 29, 'Female'],
 ['Shalom', 'Alen', 29, 'Male'],
 ['Broddy', 'Keningham', 21, 'Male'],
 ['Aurelia', 'Brechin', 33, 'Female']]

Convertir un Dataframe en una lista por columnas

Si queremos convertir un DataFrame en una lista por columnas solamente hay que transformar el contenido. Algo que se puede conseguir simplemente aplicando el método transpose() al array de NumPy antes de convertir este en una lista. Así se puede conseguir el objetivo simplemente con la siguiente línea de código

df.to_numpy().transpose().tolist()

Lo que da como resultado una lista de listas por columnas.

[['Montgomery', 'Dagmar', 'Reeba', 'Shalom', 'Broddy', 'Aurelia'],
 ['Humes', 'Elstow', 'Wattisham', 'Alen', 'Keningham', 'Brechin'],
 [27, 41, 29, 29, 21, 33],
 ['Male', 'Female', 'Female', 'Male', 'Male', 'Female']]

Volver a transformar una lista en un DataFrame

Por otro lado, en el caso de convertir una lista en un DataFrame es algo más sencillo, ya que se puede hacer con el propio constructor. Lo que se muestra a continuación.

df_list = df.to_numpy().tolist()
columns_names = df.columns.values

pd.DataFrame(df_list, columns=columns_names)

En donde se guardan los datos en df_list y los nombres de las columnas en columns_names, para posteriormente, volver a crear un DataFrame.

Conclusiones

Hoy hemos visto cómo se puede combinar las funciones de Pandas y NumPy para obtener una lista de listas a partir de un Dataframe. Un proceso que puede ser de utilidad en múltiples ocasiones cuando necesitemos disponer de los datos en otra estructura de datos.