¿Cómo convierto texto en fechas en pandas y DuckDB?
Dile a pandas y a DuckDB cómo leer tus fechas, y decide qué hacer con las que no se pueden leer.
Curso gratis. Tu Maestro, una IA, .
El formato es una instrucción
Ya sabes que ventas_exportadas tiene el día primero. Ahora díselo al programa. Un formato describe el texto pieza por pieza con códigos que empiezan con %:
| Código | Qué lee | Ejemplo |
|---|---|---|
%d | día del mes, con dos dígitos | 05 |
%m | mes, con dos dígitos | 02 |
%Y | año, con cuatro dígitos | 2026 |
%H | hora de 00 a 23 | 20 |
%M | minuto | 44 |
%S | segundo | 40 |
Lo que no es código se copia tal cual. 05/02/2026 se describe como %d/%m/%Y: día, una diagonal, mes, una diagonal, año. pandas y DuckDB usan los mismos códigos para estas piezas.
pd.to_datetime recibe el formato en format:
data["fecha"] = pd.to_datetime(data["fecha"], format="%d/%m/%Y")La columna pasa de str a datetime64.
strptime recibe el texto y el formato, y devuelve un TIMESTAMP. Como aquí no hay hora, conviértelo en DATE con ::DATE:
SELECT strptime(fecha, '%d/%m/%Y')::DATE AS fecha
FROM ventas_exportadas;Limpiar la columna fecha de ventas_exportadas
Ejemplo resuelto · 5 pasos
Convierte la columna fecha de texto a fecha y comprueba que la conversión quedó bien.
Piensa el siguiente paso por tu cuenta y luego ábrelo para comparar.
Lo que no cabe en el formato
Un archivo real casi siempre trae algún valor que no cabe: un día que no existe, una fecha escrita de otra forma, una celda vacía. Con un formato explícito, pandas se detiene en el primero con un ValueError. A veces quieres eso. Otras veces prefieres convertir lo que se pueda y revisar el resto aparte. Predice qué hace errors="coerce".
Cinco textos y un formato explícito. Escribe qué crees que imprime y por qué.
Cinco textos y un formato explícito. Escribe qué crees que imprime y por qué.
Cinco valores, uno de cada tipo
import pandas as pd
fechas = pd.Series(["28/02/2026", "31/02/2026", "1/3/2026", "2026-03-05", ""])
print(pd.to_datetime(fechas, format="%d/%m/%Y", errors="coerce"))
Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.
El NaT no es un error que puedas ignorar: es una fila que perdió su fecha. Después de convertir con coerce, cuenta cuántos quedaron y míralos antes de seguir; una Término del glosario de esas filas te dice si es una celda vacía o un formato distinto que hay que convertir aparte. Si no sabes qué hacer con tus filas sin fecha, pregúntale a tu Maestro.
DuckDB tiene las dos opciones con dos funciones: strptime se detiene con un error en el primer valor que no cabe (con 31/02/2026 dice Date out of range), y try_strptime devuelve NULL en su lugar.
Cuidado: dayfirst no es un formato
pandas también acepta dayfirst=True. La documentación de pandas advierte que no es estricto: prefiere leer el día primero, pero no lo garantiza. Con un formato explícito no hay preferencia, hay una instrucción.
Inténtalo
Ahora con menos ayuda. La consulta suma las ventas por día, pero agrupa y ordena la columna de texto. Cámbiala para que convierta fecha con su formato, la llame dia y ordene por fecha real.
Una buena respuesta tiene 22 filas, una por cada día con ventas, de 2026-01-02 a 2026-03-28 en orden. Si ya convertiste la fecha y los días siguen en desorden, cuéntale a tu Maestro qué pusiste en GROUP BY y ORDER BY.
Suma el total de ventas por día, con la fecha convertida (llámala dia) y ordenada cronológicamente.
Tu turno
Suma el total de ventas por día, con la fecha convertida (llámala dia) y ordenada cronológicamente.
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.
Inténtalo sin ayuda
Ahora en pandas y desde cero: convierte la columna fecha de ventas_exportadas, imprime la fecha mínima y la máxima, y cuántas filas quedaron sin fecha. Una buena respuesta imprime el 2 de enero y el 28 de marzo de 2026, y 0 filas sin fecha.
Convierte la columna fecha con su formato explícito. Imprime la fecha mínima, la máxima y cuántas filas quedaron sin fecha.
Convierte la columna fecha con su formato explícito. Imprime la fecha mínima, la máxima y cuántas filas quedaron sin fecha.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: ventas-exportadas, 29 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | ||||
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
| 6 | |||||
| 7 | |||||
| 8 | |||||
| 9 | |||||
| 10 | |||||
| 11 | |||||
| 12 | |||||
| 13 | |||||
| 14 | |||||
| 15 | |||||
| 16 | |||||
| 17 | |||||
| 18 | |||||
| 19 | |||||
| 20 |
Piensa en un archivo con fechas que uses en tu trabajo. ¿En qué formato vienen, y cómo lo comprobarías con los datos antes de convertirlas?
Reflexiona: Piensa en un archivo con fechas que uses en tu trabajo. ¿En qué formato vienen, y cómo lo comprobarías con los datos antes de convertirlas?
Solo tú y tu Maestro leen esto. Se queda en tu cuenta y se borra con ella.