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șteformat=saudayfirst=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âteNaTau apărut. Numără-le cuisna().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.