Skip to content
Empieza gratis

¿Por qué pandas no suma mis montos? Números guardados como texto

Convierte montos con signo de pesos y comas en números, y cuenta lo que la conversión dejó vacío sin avisar.

Curso gratis. Tu Maestro, una IA, .

El inventario dijo que monto es de tipo str. Si la abres en una hoja de cálculo, ves "$7,784.00", "4,692", "14,130", "1722": cuatro maneras de escribir dinero en una misma columna, porque cada quien capturó como le pareció. Tú lees cantidades. pandas lee texto, y el texto no se suma: se pega.

Predice qué pasa en tres intentos de trabajar con montos así.

Sumar texto

Ejemplo 1 de 3

example.py
import pandas as pd

montos = pd.Series(["1250", "980"])

print(montos.sum())

Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.

Ejemplo 2 de 3, se abre cuando expliques este

Haz tu predicción

Primero quita, después convierte, y al final cuenta

La conversión segura tiene tres pasos:

  1. Quita lo que no es número. El signo de pesos y la coma de los miles: str.replace("$", "", regex=False) y str.replace(",", "", regex=False). El regex=False deja claro que buscas ese carácter tal cual, no un patrón de búsqueda. Después, str.strip() por si quedó un espacio.
  2. Convierte con pd.to_numeric(..., errors="coerce"). Por omisión, to_numeric se detiene con el primer valor que no entiende. Con "coerce" lo vuelve hueco y sigue.
  3. Cuenta los huecos antes y después. Es el paso que nada te recuerda: si te lo saltas, nada falla. Si antes de convertir había 1 hueco y después hay 2, la conversión se comió un valor, y tienes que ir a ver cuál fue.

Cuidado con lo que coerce puede esconder. En la hoja de marzo, antes de convertir, monto tenía un hueco (la venta V-0036, pendiente de factura). Después de convertir hay dos. El segundo es la venta V-0050, que alguien capturó con la palabra "pendiente". Sin contar, ese monto habría desaparecido del total sin que nadie lo notara.

El hueco nuevo no es un error que tengas que corregir tú. Es otra pregunta para Marisol, y mientras contesta, lo dejas vacío y lo dices en el reporte.

¿Tu columna tiene montos con otro formato, como 1.250,00? Pregúntale a tu Maestro qué cambia.

Cuidado: Puntos y comas

En esta hoja la coma separa miles y el punto separa decimales. Hay hojas donde es al revés, y quitar las comas ahí cambia el valor. Antes de quitar cualquier carácter, mira varios montos completos y confirma qué hace cada signo en tu hoja.

Guarda el original mientras revisas

Un detalle que te va a ahorrar trabajo: mientras pruebas la conversión, ponla en una columna nueva (monto_num) y no sobre monto. Así puedes poner las dos lado a lado y ver qué texto produjo cada hueco. Si sobrescribes la columna, el "pendiente" desaparece y ya no hay nada que buscar. Cuando la conversión esté probada y la bitácora diga cuántos montos quedaron vacíos, en el script final puedes reemplazar la columna.

Y otra tentación: abrir la hoja, borrar "pendiente" a mano y escribir un monto que te parezca razonable. No lo hagas. Ese número no lo confirmó nadie, y el mes que entra vas a tener que acordarte de hacerlo otra vez. El código deja el hueco, la bitácora lo cuenta y Marisol decide.

Inténtalo

Convierte monto en la hoja de ventas completa y encuentra qué venta se perdió en la conversión. Si tu conteo de huecos no cambia y crees que algo anda mal, pregúntale a tu Maestro.

Quita el signo de pesos y las comas de monto, conviértelo con pd.tonumeric(..., errors="coerce") en una columna nueva montonum, y cuenta los huecos antes y después. Después imprime el folio y el monto original de cada venta que estaba escrita y ya no se convirtió. Terminaste cuan

Quita el signo de pesos y las comas de monto, conviértelo con pd.to_numeric(..., errors="coerce") en una columna nueva monto_num, y cuenta los huecos antes y después. Después imprime el folio y el monto original de cada venta que estaba escrita y ya no se convirtió. Terminaste cuando ves el conteo pasar de 1 a 2 y sabes qué folio lo causó.

Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo.

Listo para ejecutar tu código.

Ejecuta tu código para ver su salida aquí.

Datos: ventas-cooperativa, 60 filas

Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.

Los datos del ejercicio, "ventas-cooperativa". Tus cambios corren con tu código.
FilaQuitar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Página 1 de 3

Ejecútalo tú

Si lo hiciste bien, la venta que se perdió es V-0050, con "pendiente" escrito en el monto. Con los montos ya como número, la suma de la columna da 756,656 pesos. Antes de mandar ese número a nadie, contesta la pregunta de abajo.

Comprueba lo que sabes: Con `monto_num` ya convertido, `ventas["monto_num"].sum()` da 756,656. Marisol te pide el total vendido en marzo. ¿Qué le mandas?