¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Hacer preguntas a una tabla (pandas)

Después de esta lección: Puedo cargar una tabla de datos y hacerle preguntas.

Lección de 55 min3 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Un año de alquileres, dos preguntas

Una empresa de alquiler de bicis guarda una fila por cada día del año. La gerente quiere saber dos cosas. ¿De verdad hay más trabajo el fin de semana? ¿Cuántos días fueron muy movidos?

Leer 365 filas a mano no responde a ninguna de las dos. Unas pocas líneas de pandas las responden en segundos.

Al final de esta lección

Nota

Puedo cargar una tabla de datos y hacerle preguntas.

Palabras clave

PalabraQué significaEjemplo
DataFrameuna tabla de pandas con columnas con nombre
Columnaun campo con nombre, el mismo en todas las filashires["temp_c"]
Filtrarquedarse solo con las filas que pasan una pruebahires["hires"] > 400
Agruparseparar las filas según el valor de una columnagroupby("weather")
Resumirconvertir muchos valores en uno, como una media
Medianael valor del centro cuando los valores están en orden
Modael valor que más se repite

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Dos formas de entrar al laboratorio

Pulsa Iniciar el laboratorio en la barra de la lección y espera a que esté en marcha. El terminal no tiene Python propio. Cada botón Ejecutar escribe docker exec jupyter, que lanza una orden dentro del contenedor del laboratorio.

Para el cuaderno, abre JupyterLab desde la barra y crea un cuaderno nuevo. Un bloque titulado Escribe esto en tu cuaderno va en una celda nueva. No se ejecuta en esta página, porque el Python de la página no tiene pandas.

Un DataFrame es una tabla con nombres

pd.read_csv lee un archivo CSV y lo convierte en un DataFrame. Cada columna toma su nombre de la primera línea del archivo. Los nombres están en inglés, como en muchos archivos reales.

Los corchetes con un nombre eligen una columna: hires["rain_mm"] es la lluvia de cada día. Una columna tiene sus propios métodos, como max, mean y value_counts.

Carga el archivo y mira su tamaño

Comando
docker exec jupyter python3 steps/load.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe esto en tu cuaderno: una columna

Código: python
import pandas as pd

hires = pd.read_csv("hires.csv")
# Una columna: los milímetros de lluvia de cada día.
hires["rain_mm"].max()

Un filtro deja las filas que pasan

hires["hires"] > 400 hace una pregunta a cada fila. La respuesta es una columna de True y False.

Si pones esa respuesta dentro de hires[...], pandas se queda solo con las filas True. Para unir dos pruebas, escribe & para «y» y | para «o». Cada prueba va entre sus propios paréntesis.

Cuenta los días muy movidos

Comando
docker exec jupyter python3 steps/filter.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe esto en tu cuaderno: dos pruebas

Código: python
# Días de lluvia con menos de 200 alquileres.
wet_quiet = hires[(hires["weather"] == "rainy") & (hires["hires"] < 200)]
len(wet_quiet)

Un error muy común

Advertencia

Mucha gente cree que el and de Python une dos pruebas en pandas. No es así: and espera un solo True o False, y una prueba sobre una columna da 365. pandas se para con «The truth value of a Series is ambiguous». Usa & y pon cada prueba entre paréntesis.

groupby separa las filas y luego resume

hires.groupby("weather")["hires"].median() hace tres cosas. Separa las filas por tipo de tiempo. Toma la columna hires de cada grupo. Calcula la mediana de cada uno.

La media se mueve mucho con unos pocos días extremos. La mediana apenas se mueve, así que conviene mirar las dos. La moda sirve para una columna de palabras, como el tiempo.

Ejemplo resuelto: un día muy grande

DíasMediaMedianaModa
236, 198, 251, 198, 270, 312, 4551920 / 7 = 274,3251, el 4.º de 7 en orden198, dos veces
Igual, con 300 en lugar de 4551765 / 7 = 252,1251, no cambia198, dos veces

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Media y mediana a mano

Código: python
# Siete días de alquileres en una estación.
days = [236, 198, 251, 198, 270, 312, 455]

total = 0
for one in days:
    total = total + one
print("media:", round(total / len(days), 1))

in_order = sorted(days)
middle = len(in_order) // 2
print("mediana:", in_order[middle])
# Cambia 455 por 300 y vuelve a ejecutar.
# ¿Qué número cambia más?

Compara el fin de semana con el resto

Comando
docker exec jupyter python3 steps/weekend.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe esto en tu cuaderno: por tiempo

Código: python
# La mediana de alquileres para cada tipo de tiempo.
hires.groupby("weather")["hires"].median()

Para ir más lejos: el mes más tranquilo

En tu cuaderno, busca el mes con menos alquileres. Agrupa por month, calcula la media de hires y ordena el resultado con sort_values.

Después hazle a la tabla una pregunta tuya, con un filtro y un grupo a la vez. Por ejemplo: solo en días de lluvia, ¿sigue habiendo más trabajo el fin de semana? Di qué esperas antes de ejecutarlo.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.