La suma no cuadra
Trabajas en una academia de idiomas de Zaragoza. Tres compañeros apuntan las altas de clientes en la misma hoja.
Quieres sumar las cuotas del mes y Python se para con un error. Una cuota pone "N/D". Otra pone "45,00 €". Otra es negativa.
Antes de analizar nada, hay que limpiar.
Al final de esta lección
Nota
Puedo encontrar y arreglar valores que faltan y valores erróneos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Valor que falta | una celda vacía o sin dato real | "N/D" |
| Valor erróneo | un dato que no puede ser cierto | "-45" |
| Limpiar | encontrar y corregir esos valores | |
| Convertir | pasar un texto a número | float("45.0") |
| None | el valor de Python para "no hay dato" |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Primero se buscan los problemas
Los datos reales casi nunca llegan limpios. Alguien deja una celda vacía. Otro escribe "N/D".
También hay valores que existen pero no pueden ser ciertos. Un código postal español tiene cinco cifras. Una cuota no es negativa.
Por eso se recorre la tabla con un bucle y un if por cada regla. Cada fila que falla se apunta, todavía sin tocarla.
Busca las celdas con problemas
# Altas de clientes copiadas de un formulario. Algunas celdas vienen mal.
customers = [
{"name": "Lucía Pérez", "postcode": "50001", "fee": "45,00 €"},
{"name": "Jorge Gil", "postcode": "", "fee": "45,00 €"},
{"name": "Ana Ruiz", "postcode": "50012", "fee": "N/D"},
{"name": "Pablo Sanz", "postcode": "5001", "fee": "-45"},
]
for customer in customers:
problems = []
if customer["postcode"] == "":
problems.append("falta el código postal")
elif len(customer["postcode"]) != 5:
problems.append("código postal con cifras de menos")
if customer["fee"] == "N/D":
problems.append("falta la cuota")
print(customer["name"], problems)
# Añade una prueba más: la cuota no puede empezar por "-".
Lo que encuentra el programa
| Cliente | Celda | Problema | Tipo |
|---|---|---|---|
| Jorge Gil | postcode = "" | está vacío | falta |
| Ana Ruiz | fee = "N/D" | no hay cuota | falta |
| Pablo Sanz | postcode = "5001" | solo 4 cifras | erróneo |
| Pablo Sanz | fee = "-45" | cuota negativa | erróneo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Después se arregla o se marca
Algunos valores se pueden arreglar. "45,00 €" es un buen dato mal escrito. Quitas el símbolo, cambias la coma por un punto y lo conviertes en número.
Otros no se pueden adivinar. Si falta la cuota, no te la inventas. La marcas con None, que en Python significa "no hay dato".
Lo que no sabes arreglar se le pregunta a quien apuntó el dato.
Convierte una cuota en número
# Una cuota escrita a la española: coma decimal y símbolo del euro.
text = " 45,00 € "
text = text.strip() # quita los espacios de los lados
text = text.replace("€", "") # quita el símbolo
text = text.strip()
text = text.replace(",", ".") # Python usa punto decimal
fee = float(text)
print("Cuota como número:", fee)
print("Cuota con IVA:", fee * 1.21)
# Cambia el texto de arriba por "12,50 €" y vuelve a ejecutar.
Un error frecuente
Advertencia
Mucha gente cree que un valor que falta se arregla poniendo 0. No es así. Un 0 dice que la cuota es gratis, y eso cambia la suma y la media. Usa None cuando no sepas el dato, y así las cuentas pueden saltarlo.
Tu turno: limpiar las cuotas
Contabilidad quiere sumar las cuotas del trimestre. Escribe una función que convierta una cuota escrita como texto en un número. Si no hay dato, devuelve None. Unas pruebas ocultas comprueban tu respuesta.