¿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 Término del glosario. 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
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
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 Término del glosario 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.
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.
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
| Columna | Tipo |
|---|---|
| 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
| folio | fecha | sucursal | total |
|---|---|---|---|
| 1001 | 02/01/2026 | Roma | 460 |
| 1002 | 05/01/2026 | Roma | 120 |
| 1003 | 05/01/2026 | Del Valle | 120 |
Cada ejecución empieza con copias nuevas de las tablas del curso, así que puedes probar lo que quieras. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu consulta.
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.