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.

Para completar las prácticas necesitas bases de ambas herramientas: seleccionar y filtrar un DataFrame, agrupar columnas en pandas, y escribir SELECT, WHERE y GROUP BY en SQL. En los calendarios usarás WITH y LEFT JOIN, con una preparación resuelta en el módulo 3. Las pestañas cambian la explicación; las prácticas alternan herramientas y algunas empiezan sin código. Puedes leer con una sola base, pero no son dos rutas independientes.

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. Lo que escribas se queda en este navegador y te espera en tu curso.

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 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.

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

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. La primera repasa lo que acabas de practicar; las otras cinco anticipan temas nuevos y ayudan a ubicar 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, 1 de 6: 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?

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.