Introducción a pandas

En este notebook introducimos los conceptos básicos necesarios para trabajar con datos tabulares en Python.

Trabajaremos con pandas, una de las librerías más utilizadas para análisis de datos.


Objetivos

  • Leer datos desde ficheros
  • Entender la estructura de un DataFrame
  • Acceder a filas y columnas
  • Filtrar datos
  • Agregar información
  • Combinar datasets (merge)
  • Reestructurar datos (pivot)

Leer datos

import json
import pandas as pd

df = pd.read_csv("data/covid19/casos_hosp_uci_def_sexo_edad_provres.csv")


# cargamos el diccionario de códigos de provincias
with open("data/covid19/cod_provinces.json") as f:
    cod_pro_dict = json.load(f)

# Convertimos los Ids de provincias a códigos del INE (necesario para el merge con población)
df['provincia_iso'] = df['provincia_iso'].map(cod_pro_dict)

df.head()
print("Dataframe shape:", df.shape)
print()
for i in df.columns:
    print(f"- {i}")
print()
df.head()

Selección de columnas

# Seleccionamos una columna
df["num_casos"].head()
# Seleccionamos varias columnas
df[["provincia_iso", "num_casos"]].head()

Filtrado de datos

df[df["provincia_iso"] == "A"].head()
df[df["num_casos"] > 100].head()

Indexado

Existe distintas formas de indexado

# Un alemento específico
df.iloc[0]

# Un subconjunto de filas
df.iloc[0:5]

Agrupación de datos

df.groupby("provincia_iso")["num_casos"].sum().head()

Agrupación por varias columnas

df.groupby(["fecha", "provincia_iso"])["num_casos"].sum().head()

Reset index

df_agg = df.groupby(["fecha", "provincia_iso"])["num_casos"].sum().reset_index()
df_agg.head()

Combinar datasets (merge)

pop = pd.read_parquet("data/covid19/provincias.parquet")
pop = pop[["name", "total"]].rename(columns={"total": "poblacion"})

covid_total = df.groupby("provincia_iso")["num_casos"].sum().reset_index()

merged = covid_total.merge(pop, left_on="provincia_iso", right_index=True)
merged.head()
covid_total

Reestructurar datos (pivot)

pivot = df_agg.pivot(
    index="fecha",
    columns="provincia_iso",
    values="num_casos"
)

pivot.head()

Para una introducción más profunda revisar los siguientes recursos:

  • https://pandas.pydata.org/docs/user_guide/10min.html
  • https://github.com/mrdbourke/zero-to-mastery-ml/blob/master/section-2-data-science-and-ml-tools/introduction-to-pandas.ipynb
  • https://colab.research.google.com/github/waterhackweek/learning-resources/blob/master/notebooks/pandas-intro.ipynb