Skip to content
Empieza gratis

¿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ódigoQué leeEjemplo
%ddía del mes, con dos dígitos05
%mmes, con dos dígitos02
%Yaño, con cuatro dígitos2026
%Hhora de 00 a 2320
%Mminuto44
%Ssegundo40

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:

Python
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:

SQL
SELECT strptime(fecha, '%d/%m/%Y')::DATE AS fechaFROM 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 pd.to_datetime y un formato explícito, un valor no vacío incompatible detiene la conversión con ValueError. Las ausencias ("", None) se vuelven NaT incluso sin coerce. 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 valores, uno de cada tipo

coerce.py
import pandas as pdfechas = 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. Lo que escribas se queda en este navegador y te espera en tu curso.

NaT significa que no hay fecha: puede ser una ausencia de origen o un valor que no se pudo convertir. Conserva la columna original, cuenta las ausencias originales y los fallos nuevos por separado y míralos antes de seguir; una 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. Un NULL de origen sigue siendo NULL. Si usas read_csv(parse_dates=...), comprueba el tipo después: un valor incompatible puede dejar toda la columna como texto sin lanzar ese error; no es el mismo comportamiento que to_datetime.

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.

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

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

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.

Después prueba una columna pequeña con 28/02/2026, una cadena vacía y 31/02/2026. Conserva el original, identifica las ausencias antes de convertir, usa coerce y cuenta solo los nuevos fallos. Debes distinguir una ausencia original de un valor incompatible y mostrar 31/02/2026 como el texto que falló.

Tu turno

Convierte la columna fecha con su formato explícito. Imprime la fecha mínima, la máxima y cuántas filas quedaron sin fecha. Después, con la muestra de tres valores del enunciado, imprime por separado las ausencias originales y los fallos de conversión, y muestra el original que falló.

Datos: ventas-exportadas, 29 filas
Los datos del ejercicio, "ventas-exportadas". 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 2

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.