Skip to content
Empieza gratis

¿Por qué mis fechas se ordenan mal? Fechas guardadas como texto

Reconoce en pandas y en DuckDB una fecha guardada como texto, que ordena, filtra y da máximos equivocados sin ningún error, y conviértela antes de usarla.

Curso gratis. Tu Maestro, una IA, .

Café Altura y su archivo de ventas

En este curso trabajas con los datos de Café Altura, una cadena de tres cafeterías en la Ciudad de México: Roma, Coyoacán y Del Valle. La cadena no existe y los datos son sintéticos: los generamos para este curso, con los problemas que sí aparecen en archivos reales.

El primer archivo es ventas_exportadas: 29 ventas de enero a marzo de 2026, exportadas desde la caja a un . Cada fila tiene un folio, una fecha, la sucursal y el total en pesos. La fecha viene como la escribimos en México, con el día primero: 02/01/2026 es el 2 de enero.

Parece una fecha. Para la computadora, mientras nadie la convierta, es un texto de diez caracteres. Antes de leer por qué eso importa, haz una predicción.

Dos programas cortos de Python con fechas guardadas como texto. Escribe qué crees que imprime cada uno y por qué, y después córrelo.

Dos programas cortos de Python con fechas guardadas como texto. Escribe qué crees que imprime cada uno y por qué, y después córrelo.

Ordenar cuatro fechas

Ejemplo 1 de 2

ordenar.py
fechas = ["13/01/2026", "28/02/2026", "02/01/2026", "01/03/2026"]
print(sorted(fechas))

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

Ejemplo 2 de 2, se abre cuando expliques este

Haz tu predicción

Lo que pasó

Un texto se compara carácter por carácter, de izquierda a derecha. En dd/mm/aaaa el primer carácter es el día, así que ordenar el texto ordena por día del mes y deja el mes y el año para después. El resultado se ve ordenado y está mal.

En el archivo de Café Altura pasa lo mismo con todo lo que compara:

  • La fecha mínima como texto es 01/02/2026, el 1 de febrero. La venta más antigua es del 2 de enero.
  • La máxima como texto es 30/01/2026. La venta más reciente es del 28 de marzo.
  • El filtro fecha > '15/02/2026' devuelve 9 ventas. Después del 15 de febrero hubo 13.

Ninguna de estas consultas da error. Ese es el problema: un texto que parece fecha te deja ordenar, filtrar y sacar máximos, y te entrega una respuesta equivocada sin avisar. ¿Todavía se te hace raro que el 1 de marzo salga antes que el 2 de enero? Tu Maestro te lo explica con otro ejemplo.

Cómo saber qué tipo tiene tu columna

Antes de ordenar o filtrar, pregunta qué tipo tiene la columna. En este curso practicas con y con DuckDB; elige tu herramienta y el curso te mostrará esa en cada página que tenga las dos.

data.dtypes muestra el tipo de cada columna de un DataFrame. En ventas_exportadas, la columna fecha aparece como str: texto. Una columna de fechas aparece como datetime64.

Python
print(data.dtypes)

typeof dice el tipo de una expresión. En ventas_exportadas, la columna fecha es VARCHAR: texto. Una columna de fechas es DATE.

SQL
SELECT typeof(fecha) FROM ventas_exportadas LIMIT 1;

Inténtalo

La consulta de abajo calcula la fecha más reciente tratando la columna como texto. Agrega una segunda columna, max_fecha, que calcule lo mismo después de convertir el texto en fecha con strptime(fecha, '%d/%m/%Y')::DATE. Dos lecciones más adelante verás qué significa cada parte del formato; por ahora cópialo así.

Una buena respuesta tiene una fila con dos valores distintos: el texto 30/01/2026 y la fecha 2026-03-28. Si tu consulta da un error, pégalo y pregúntale a tu Maestro.

Calcula la fecha más reciente de ventasexportadas dos veces: como texto (maxtexto) y convertida en fecha (maxfecha).

Tu turno

Calcula la fecha más reciente de ventas_exportadas dos veces: como texto (max_texto) y convertida en fecha (max_fecha).

Tablas: ventas_exportadas (folio, fecha, sucursal, total)

ventas_exportadas · 29 filas

ColumnaTipo
folio Número de ticket del punto de venta.BIGINT
fecha La fecha tal como la exporta el punto de venta: texto en formato día/mes/año (dd/mm/aaaa).VARCHAR
sucursal Roma, Coyoacán o Del Valle.VARCHAR
total Total del ticket en pesos.BIGINT

Primeras filas

foliofechasucursaltotal
100102/01/2026Roma460
100205/01/2026Roma120
100305/01/2026Del Valle120

Cada ejecución empieza con copias nuevas de las tablas del curso, así que puedes probar lo que quieras.

Listo para ejecutar tu consulta.

Ejecútalo tú

Una fecha convertida se compara como fecha: primero el año, luego el mes, luego el día. Por eso max_fecha sí es el 28 de marzo, y por eso todo lo que hagas después con fechas empieza por convertirlas.

Si tus fechas ya se ven raras desde que abriste el CSV en Excel, ese es otro problema: Excel puede convertir o reescribir las fechas al abrir el archivo, antes de que tú hagas nada. Eso lo cubre otro curso gratuito de Maestro.

Antes de seguir: seis preguntas rápidas

Contesta lo que creas, sin buscar. No cuentan para nada: sirven para que tú y tu Maestro sepan de dónde partes, y al final del curso vas a encontrar preguntas parecidas. Si fallas alguna, es justo lo que el curso enseña.

Comprueba lo que sabes: Ordenas como texto estas tres fechas en formato día/mes/año: 05/01/2026, 13/01/2026 y 02/03/2026. ¿Cuál sale primero?

Comprueba lo que sabes: En pandas, conviertes una columna con pd.to_datetime sin decirle el formato. ¿Qué fecha queda para el texto 05/02/2026?

Comprueba lo que sabes: La columna creado_utc guarda fecha y hora. Filtras los pedidos de marzo con BETWEEN '2026-03-01' AND '2026-03-31'. ¿Qué pasa con un pedido del 31 de marzo a las 15:00?

Comprueba lo que sabes: Tu sistema de ventas guarda la hora en UTC. Una venta quedó registrada como 2026-05-01 02:10:00. ¿En qué mes cuenta para una tienda de Ciudad de México?

Comprueba lo que sabes: Una sucursal cerró todo agosto y no tiene ninguna fila ese mes. Agrupas sus ventas por mes. ¿Qué aparece para agosto?

Comprueba lo que sabes: Marta nació el 20 de septiembre de 1990. ¿Qué edad tiene el 1 de septiembre de 2026?

Si alguna respuesta te sorprendió, cuéntale a tu Maestro cuál fue y qué esperabas.

En la siguiente lección ves de dónde viene la segunda pregunta: el mismo texto puede ser dos fechas distintas, y cada programa elige una.