¿Cuántos pedidos siguen sin salir?
Empiezas a trabajar en una tienda online de aceite de oliva de Jaén. Tu jefa te pasa la exportación de pedidos del mes.
Te pregunta: "¿Cuántos pedidos siguen pendientes de envío?"
El archivo tiene 4.000 filas. Nadie las mira una a una. Con unas pocas líneas de Python tienes la respuesta en un segundo.
Al final de esta lección
Nota
Puedo leer y filtrar filas de datos con Python.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Fila | un registro completo, como un pedido | |
| Columna | un dato que tiene cada fila | province |
| Diccionario | valores guardados bajo un nombre | {"status": "pendiente"} |
| Lista de diccionarios | una tabla: un diccionario por fila | |
| Filtrar | quedarse solo con las filas que pasan una prueba |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cada fila es un diccionario
Piensa en una hoja de cálculo. Arriba están los nombres de las columnas. Cada pedido ocupa una fila.
En Python, una fila es un diccionario. Cada nombre de columna es una clave. La clave te da el valor de esa fila.
La tabla entera es una lista de diccionarios. orders[0] es la primera fila. orders[0]["province"] es su provincia.
Nombres en inglés
Consejo
Los nombres de variables y claves van en inglés, como en la mayoría de empresas. Así tu código se entiende en cualquier equipo. Los textos que lee una persona van en español.
Lee una fila y un valor
# Cada pedido es una fila: un diccionario con el nombre de la columna y su valor.
orders = [
{"id": 1201, "province": "Madrid", "total": 42.50, "status": "enviado"},
{"id": 1202, "province": "Sevilla", "total": 18.90, "status": "pendiente"},
{"id": 1203, "province": "Madrid", "total": 75.00, "status": "pendiente"},
]
print("Filas en la tabla:", len(orders))
print("Primer pedido:", orders[0]["id"])
print("Provincia del primer pedido:", orders[0]["province"])
# Cambia la última línea para mostrar el estado del tercer pedido.
print("Importe del segundo pedido:", orders[1]["total"])
Los mismos pedidos, paso a paso
| Python | Qué es | Valor |
|---|---|---|
| len(orders) | el número de filas | 3 |
| orders[0] | la primera fila | todo el pedido 1201 |
| orders[0]["province"] | un dato de la primera fila | Madrid |
| orders[2]["total"] | un dato de la tercera fila | 75.0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un bucle y un if filtran filas
Para filtrar, miras cada fila por turno. De eso se encarga el bucle for.
Dentro del bucle, un if pone a prueba la fila. Si pasa, append la añade a una lista nueva.
Al terminar, la lista nueva solo tiene las filas que querías. len te dice cuántas son.
Quédate con los pendientes
orders = [
{"id": 1201, "province": "Madrid", "total": 42.50, "status": "enviado"},
{"id": 1202, "province": "Sevilla", "total": 18.90, "status": "pendiente"},
{"id": 1203, "province": "Madrid", "total": 75.00, "status": "pendiente"},
{"id": 1204, "province": "Bizkaia", "total": 31.20, "status": "enviado"},
{"id": 1205, "province": "Valencia", "total": 9.95, "status": "pendiente"},
]
# Las filas que pasan la prueba van a una lista nueva.
pending = []
for order in orders:
if order["status"] == "pendiente":
pending.append(order)
for order in pending:
print(order["id"], order["province"], order["total"])
print("Pedidos pendientes:", len(pending))
# Cambia la prueba para quedarte con los pedidos de Madrid.
Un error frecuente
Advertencia
Mucha gente cree que filtrar borra las filas que no pasan. No es así. El bucle llena una lista nueva y la original conserva todas sus filas. Por eso puedes volver a filtrar los mismos pedidos con otra prueba.
Tu turno: los pedidos grandes
El equipo de atención al cliente llama a quien gasta mucho para darle las gracias. Necesita los pedidos de un importe mínimo o más. Escribe una función que los filtre. Unas pruebas ocultas comprueban tu respuesta.