pd.to_datetime() în pandas

Date calendaristice pandas 1.0+

Transformă text sau numere în date calendaristice (datetime64), ca să poți calcula cu ele și să folosești accesorul .dt.

Sintaxă
pd.to_datetime(arg, errors='raise', dayfirst=False, format=None, ...)

Ce face pd.to_datetime()

Datele citite dintr-un CSV ajung de obicei ca text: „05.03.2026” este doar un șir de caractere. pd.to_datetime() le transformă în tipul datetime64, cu care poți sorta corect, scădea două date sau extrage anul și luna.

Pentru formatul românesc (zi.lună.an) dă formatul explicit, de exemplu format="%d.%m.%Y", sau dayfirst=True pentru date ca „05/03/2026”. Fără ele, pandas citește „05/03/2026” ca 3 mai, după formatul american (lună/zi/an).

Implicit, o valoare care nu poate fi citită oprește programul cu eroare (errors="raise"). Cu errors="coerce", valorile greșite devin NaT (data lipsă), iar restul se transformă normal.

Parametri

Parametru Descriere
arg Ce se transformă: un text, o listă, o Series sau un DataFrame cu coloanele year, month, day.
format Formatul textului, cu codurile strftime: %d zi, %m lună, %Y an, %H:%M oră și minut.
dayfirst True: în datele ambigue, ziua este prima (05/03 = 5 martie).
errors "raise" (implicit) aruncă eroare; "coerce" pune NaT la valorile greșite.
unit Pentru numere: unitatea, de exemplu "s" pentru secunde de la 1 ianuarie 1970.

Ce returnează

Pentru o Series: o Series de tip datetime64. Pentru o listă: un DatetimeIndex. Pentru un text: un Timestamp.

Exemple

Exemplul 1: Coloană de text în format românesc

import pandas as pd

df = pd.DataFrame({"client": ["Ana", "Mihai", "Elena"],
                   "data": ["05.03.2026", "28.02.2026", "15.01.2026"]})
print(df.dtypes)
df["data"] = pd.to_datetime(df["data"], format="%d.%m.%Y")
print(df.dtypes)
print(df.sort_values("data"))

Rezultat

client    str
data      str
dtype: object
client               str
data      datetime64[us]
dtype: object
  client       data
2  Elena 2026-01-15
1  Mihai 2026-02-28
0    Ana 2026-03-05

Exemplul 2: dayfirst pentru date cu bară oblică

Fără dayfirst=True, „05/03/2026” s-ar citi 3 mai.

import pandas as pd

date = pd.Series(["05/03/2026", "13/03/2026"])
print(pd.to_datetime(date, dayfirst=True))

Rezultat

0   2026-03-05
1   2026-03-13
dtype: datetime64[us]

Exemplul 3: Valori greșite cu errors=”coerce”

„31.02.2026” nu există, iar „necunoscut” nu este o dată: ambele devin NaT.

import pandas as pd

date = pd.Series(["10.10.2026", "31.02.2026", "necunoscut"])
rezultat = pd.to_datetime(date, format="%d.%m.%Y", errors="coerce")
print(rezultat)
print("Date lipsă:", rezultat.isna().sum())

Rezultat

0   2026-10-10
1          NaT
2          NaT
dtype: datetime64[us]
Date lipsă: 2

Greșeli frecvente

  • Nu dai formatul la date românești: „05/03/2026” este citit ca 3 mai, iar dacă în aceeași coloană apare și „13/03/2026”, primești ValueError: time data "13/03/2026" doesn't match format "%m/%d/%Y". Folosește format= sau dayfirst=True.
  • Sortezi coloana de date cât timp este încă text: „15.01.2026” ajunge după „05.03.2026”, pentru că se compară litera cu litera.
  • Pui errors="coerce" și nu verifici câte NaT au apărut. Numără-le cu isna().sum(), ca să nu pierzi date fără să știi.

Comenzi înrudite

  • Series.dt (year, month, day_name, strftime, to_period): Accesorul .dt dă acces la anul, luna, ziua sau ziua săptămânii dintr-o coloană de date și le formatează ca text.
  • pd.date_range(): Creează un șir de date la intervale egale: fiecare zi, fiecare sfârșit de lună sau fiecare luni dintr-o perioadă.
  • pd.read_csv(): Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.
  • DataFrame.astype() și pd.to_numeric(): Schimbă tipul unei coloane (int, float, category, str); pd.to_numeric transformă textul în numere și poate pune NaN la valorile greșite.