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.