Posiblemente una de las operaciones más habituales con Pandas sea convertir listas en DataFrames. Lo que se puede hacer con el constructor DataFrame
de la librería.
Creación de DataFrames desde una lista de listas o de tuplas
Posiblemente la forma más sencilla para crear un DataFrame a partir de una lista es cuando tenemos una lista de listas, o una lista de tuplas. Por ejemplo, una lista como la siguiente en la que cada elemento es un registro de datos.
users = [[1, 'Josy', 'Clarae', 'Female'], [2, 'Vaughn', 'Halegarth', 'Male'], [3, 'Neale', 'Georgievski', 'Male'], [4, 'Teirtza', 'Teirtza', 'Female']]
En este caso se puede utilizar el constructor DataFrame
para crear sin más problemas la un objeto DataFrame.
import pandas as pd df = pd.DataFrame(users)
0 1 2 3 0 1 Josy Clarae Female 1 2 Vaughn Halegarth Male 2 3 Neale Georgievski Male 3 4 Teirtza Teirtza Female
El procedimiento es exactamente el mismo mismo si en lugar de tener cada uno de los elementos tenemos una tupla en lugar de una lista.
Creación de un DataFrame con columnas e índices
Los nombres de columnas y los índices de la sección anterior son valores numéricos. El constructor de DataFrames de Pandas dispone de dos propiedades opcionales con las es posible asignar estos valores. Las propiedades columns
y index
que asignan respectivamente los índices y las columnas. Así, siguiendo con el ejemplo anterior se puede crear un DataFrame con nombres para los índices y las columnas.
df = pd.DataFrame(users, columns=['id','first_name', 'last_name', 'gender'], index=['a','b','c','d'])
id first_name last_name gender a 1 Josy Clarae Female b 2 Vaughn Halegarth Male c 3 Neale Georgievski Male d 4 Teirtza Teirtza Female
Como se muestra en el ejemplo los índices de las filas no tiene que ser necesariamente un valor numérico.
Omitir valores en la creación de DataFrame
¿Qué pasa si queremos omitir un valor de cada uno de los registros? Se podría crear el DataFrame y posteriormente eliminar la columna no deseada. Pero es un proceso tedioso. También se puede utilizar el método from_records
de DataFrame
para realizar esta operación en un único paso. Un método con el que los objetos se construyen exactamente igual, pero en el que existe la propiedad exclude
con la que se puede indicar el identificador de las columnas o columnas que se desea omitir. Por ejemplo, si se desea omitir el id
del DataFrame creado anteriormente.
df = pd.DataFrame.from_records(users, columns=['id','first_name', 'last_name', 'gender'], index=['a','b','c','d'], exclude=['id'])
first_name last_name gender a Josy Clarae Female b Vaughn Halegarth Male c Neale Georgievski Male d Teirtza Teirtza Female
Creación del DataFrame desde múltiples listas
También es bastante habitual que los valores que tenemos para crear el DataFrame se encuentren en listas diferentes. Es decir, una lista para cada una de las columnas. En este caso es necesario convertir estas en una lista de tuplas. Algo que se puede conseguir fácilmente mediante el uso de la función zip
. Así, se puede crear un DataFrame solamente con:
first_name = ['Josy', 'Vaughn', 'Neale', 'Teirtza'] last_name = ['Clarae', 'Halegarth', 'Georgievski', 'Teirtza'] gender = ['Female', 'Male', 'Male', 'Female'] user_list = list(zip(first_name, last_name, gender)) df = pd.DataFrame(user_list)
0 1 2 0 Josy Clarae Female 1 Vaughn Halegarth Male 2 Neale Georgievski Male 3 Teirtza Teirtza Female
Conclusiones
En esta entrada hemos visto diferentes métodos para convertir listas en DataFrames con Pandas. Una operación básica pero que es importante conocer bien para tener trabajar de forma eficiente con la librería Pandas.