Crear DataFrames con Pandas y Python

En este artículo aprenderás a crear DataFrames con Pandas y Python a partir de datos que provienen de listas, diccionarios, arrays, etc. No me gustaría que el tutorial fuese largo y extenso por lo que hablaré sobre la importación, modificación y exportación a los diferentes formatos como CSV, Excel, JSON, HTML o SQL en un artículo diferente.

Para cumplir el objetivo de crear nuestro primer dataframe con el módulo Pandas es necesario tener un conocimiento medio sobre Python, especialmente las listas, diccionarios, tuplas o conjuntos.

Recomendación

Si es tu primer contacto con Python puedes acceder al tutorial gratuito que hemos creado para principiantes. En el caso de que solo necesites reforzar las estructuras de datos como la listas, diccionarios y otros, puedes ir directamente desde su enlace.

Tutorial de Python 3 en español

Qué es el módulo de Pandas

Pandas es una biblioteca escrita en Python como una extensión de NumPy, que permite la manipulación y la analítica de datos. Pandas dispone de tres estructuras de datos que son:

  1. Series: Listas de una dimensión.
  2. DataFrame: Tablas de 2 dimensiones.
  3. Panels: Tablas de 3 dimensiones (poco usado).

Este artículo hace referencia a la segunda estructura de datos que son los dataframes, veamos su estructura.

DataFrame

Un dataframe es una estructura de datos bidimensional en el que se puede guardar diferentes tipos de datos y cuya estructura está compuesta por columnas y filas. Su índice al igual que en la listas indica la posición de sus elementos.

El ejemplo anterior refleja que el dataframe está compuesto por 4 columnas y 5 filas, la estructura contiene los datos de personas y aspectos demográficos.

Instalación de Pandas en Python

En el caso de que uses cuadernos de Jupyter como Colab o Kaggle entre los diferentes que existen, basta con importar el módulo y listo. En el caso contrario, deberás de instalarlo en Python mediante pip.

pip install pandas

Para importar el módulo basta con usar la siguiente sintaxis como cualquier otra importación:

import pandas as pd

Crear un DataFrame vacío

Crear un dataframe vacío permite que puedas ir añadiendo columnas e ir insertando datos de forma progresiva según lo vayas necesitando.

Después de haber realizado el paso anterior que es importar pandas, vamos a crear un dataframe de forma simple al que no vamos a asignarle ningún parámetro:

df = pd.DataFrame()

Crear un dataframe vacío y sin columnas es poco útil, por ello podemos crear las columnas que necesitemos e ir aumentándolas progresivamente. Una forma básica es la siguiente sintaxis:

df = pd.DataFrame(columns = ['ID', 'Nombre', 'Edad'])
df.head()
# Salida
ID 	Nombre 	Edad

Ahora, para que nuestro dataframe no esté vacío, vamos a insertarle algunos datos y mostrarlo con el método head(), del que hablaré más adelante.

df['ID'] = [1234]
df['Nombre'] = "Pedro"
df['Edad'] = 23

df.head()
# Salida

    ID 	  Nombre 	Edad
0 	1234  Pedro 	23

Crear un DataFrame a partir de una lista

Para crear un dataframe a partir de una lista simplemente debes de crear la lista y pasarla a pd.DataFrame(). La segunda lista la he utilizado para darle nombre a las columnas, muy útil cuando se trata de dataframes con muchas columnas.

country = ["México", "USA", "España"]
col_names = ["País"]

data = pd.DataFrame(country, columns = col_names)
data.head()
# Salida

    País
0 	México
1 	USA
2 	España

Con el método head() podemos consultar las primeras filas del dataframe que por defecto, si no le aplicamos parámetros muestra los últimos 5. Veamos en el siguiente ejemplo el resultado aplicando un 2 como parámetro.

data.head(2)
# Salida
    
    País
0 	México
1 	USA

El método tail() obtiene las últimas filas en lugar de las primeras.

data.tail(2)
# Salida

    País
1 	USA
2 	España

Crear un DataFrame usando múltiples listas

Para crear un dataframe con múltiples listas podemos utilizar el método zip(), que sirve para empaquetar los elementos iterables de nuestras listas generando un conjunto de tuplas, que respeta el orden de sus elementos es sus respectivas listas.

country = ["Mexico", "USA", "España"]
currency = ["Peso", "Dolar", "Euro"]
exchange = [ 23.39, 1.18, 1]

# Nombre de las columnas del df
num_columns = ["País", "Moneda", "Cambio"]

data = pd.DataFrame(list(zip(country, currency, exchange)), columns = num_columns)
data.head()
# Salida

    País 	Moneda 	Cambio
0 	Mexico 	Peso 	23.39
1 	USA 	Dolar 	1.18
2 	España 	Euro 	1.00

El resultado es un dataframe que muestra el valor de la moneda del país que proviene.

Recomendación

Es recomendable verificar que la longitud de la listas sean iguales para evitar la perdida de datos.

También podemos utilizar una lista multidimensional, es decir, listas dentro de otras listas como podemos observar en el siguiente ejemplo, cuyo resultado es idéntico al anterior:

data = [["Mexico", "Peso", 23.39],
        ["USA", "Dolar", 1.18],
        ["España", "Euro", 1]]

num_columns = ["País", "Moneda", "Cambio"]

dt = pd.DataFrame(data, columns = num_columns)
dt.head()

Crear un DataFrame a partir de un diccionario de listas

Para crear un dataframe a partir de un diccionario cuyo valor son listas, lo haremos de la siguiente forma:

data = {"Nombre": ["Jose", "Cristina", "Andrea", "Laura"],
        "Edad": [62, 41, 24, 19],
        "Nacionalidad": ["Española", "Española", "Francesa", "Italiana"],
        "Cliente": [False, True, True, True]}

df = pd.DataFrame(data = data)
df = df.set_index("Nombre")
df.index.names = [None]
df.head()
    Nombre 	     Edad 	Nacionalidad 	Cliente
0 	Jose 	     62 	Española 	    False
1 	Cristina 	 41 	Española 	    True
2 	Andrea 	     24 	Francesa 	    True
3 	Laura 	     19 	Italiana 	    True

Si te das cuenta verás que al comienzo de cada fila hay una serie de números (índices) que indican el número donde se encuentra el dato. Para mejorar su aspecto vamos a mostrar el nombre de la persona al comienzo de cada fila, mejorando así su visualización.

Primero usamos set_index() para fijar la columna Nombre como índice, posteriormente ocultamos la palabra (opcional). Añade al anterior código las siguientes líneas para obtener el resultado esperado:

df = df.set_index("Nombre")
df.index.names = [None]
# Salida

          Edad 	Nacionalidad 	Cliente
Jose 	  62 	Española 	    False
Cristina  41 	Española 	    True
Andrea 	  24 	Francesa 	    True
Laura 	  19 	Italiana 	    True

Crear un DataFrame a partir de una lista de diccionarios

Al crear un dataframe a partir de una lista de diccionarios debemos de tener en cuenta de que si las claves de los diccionarios que están dentro de la lista son diferentes, creará una columna por cada clave.

Nota

¡Cuidado con las mayúsculas y minúsculas! Al crear una nueva columna las filas que no contengan ningún valor en ella devolverá un NaN.

data = [{'Prenda': "Camiseta", "Color": "Blanco", "Stock": 35, "Vendido": 3},
        {'Prenda': "Pantalón", "Color": "Rojo", "Stock": 15, "Vendido": 13},
        {'Prenda': "Falda", "Color": "Negro", "Stock": 20, "Vendido": 17}]

df = pd.DataFrame(data)
df = df.set_index("Prenda")
df.index.names = [None]
df.head()
# Salida

          Color 	Stock 	Vendido
Camiseta  Blanco 	35 	    3
Pantalón  Rojo 	    15 	    13
Falda 	  Negro 	20 	    17

Crear un DataFrame a partir de un array

Para crear un array o matriz en Python, utilizaremos la librería NumPy. Si todavía no conoces esta librería dispones de un tutorial completo sobre su uso y qué hemos creado desde cero.

En el siguiente ejemplo vamos a simular las estadísticas de un equipo de baseball según las victorias y derrotas acumuladas durante 3 temporadas.

Nota

Para crear una matriz con NumPy recuerda que debes de importar la librería.

import numpy as np

# % de victorias por partidos jugados
data = np.matrix([[10, 20, 33],
                  [15, 15, 50],
                  [18, 12, 60]])

year = [2019, 2020, 2021]
stats = ["W", "L", "%"]

df = pd.DataFrame(data, index = year, columns = stats)
df.head()
# Salida

        W 	L 	%
2019 	10 	20 	33
2020 	15 	15 	50
2021 	18 	12 	60

Conclusión

En este artículo hemos hablado sobre las diferentes formas de crear un DataFrame a partir de listas, diccionarios o directamente vacíos para posteriormente, ir insertando columnas y datos.

Otro punto a tener en cuenta es que cuando creamos un DataFrame la fuente de los datos puede proceder de diferentes sitios o archivos, que como explique al principio, lo veremos en un artículo específico para ello.

¿Te ha parecido útil?