Ce face DataFrame.astype() și pd.to_numeric()
astype() convertește valorile în alt tip: df["an"].astype(int), astype(float), astype("str") pentru text sau astype("category") pentru coloane cu puține valori care se repetă (orașe, categorii de produse), care ocupă mai puțină memorie. Pe un tabel poți da un dicționar: df.astype({"an": int, "oras": "category"}).
Dacă o singură valoare nu se poate converti (de exemplu textul „n/a” într-o coloană de numere), astype aruncă eroare. pd.to_numeric(s, errors="coerce") transformă ce poate în numere și pune NaN la rest, ca să vezi apoi ce valori au fost greșite.
O coloană de întregi nu poate avea NaN în tipul int64. Pentru întregi cu valori lipsă folosește tipul "Int64" (cu I mare), care afișează lipsurile ca <NA>.
Parametri
| Parametru | Descriere |
|---|---|
dtype |
Tipul nou: int, float, "int64", "Int64", "str", "category", bool sau un dicționar {coloana: tip}. |
errors (astype) |
"raise" (implicit) sau "ignore" (lasă datele neschimbate la eroare). |
arg (to_numeric) |
Un Series, o listă sau o valoare. |
errors (to_numeric) |
"raise" (implicit) sau "coerce": valorile care nu sunt numere devin NaN. |
downcast (to_numeric) |
"integer", "signed", "unsigned" sau "float": alege cel mai mic tip numeric potrivit. |
Ce returnează
Un obiect nou cu tipul schimbat (astype) sau un Series numeric (to_numeric).
Exemple
Exemplul 1: Conversii cu astype
Coloanele citite ca text devin numere, iar orașul devine categorie.
import pandas as pd
df = pd.DataFrame({
"an": ["2024", "2025", "2026"],
"pret": ["12.5", "14", "15.75"],
"oras": ["Iași", "Cluj", "Iași"],
})
print(df.dtypes)
print()
df = df.astype({"an": int, "pret": float, "oras": "category"})
print(df.dtypes)
print()
print(df["pret"].sum())
print(df["oras"].cat.categories.tolist())
print(df["an"].astype("str").tolist())
Rezultat
an str
pret str
oras str
dtype: object
an int64
pret float64
oras category
dtype: object
42.25
['Cluj', 'Iași']
['2024', '2025', '2026']
Exemplul 2: Text cu valori greșite: pd.to_numeric(errors=”coerce”)
„n/a” și „12,5” (cu virgulă) nu sunt numere valide, deci devin NaN. Virgula se poate înlocui înainte cu punct.
import pandas as pd
lei = pd.Series(["120", "n/a", "12,5", "300"])
try:
lei.astype(float)
except ValueError as e:
print("astype:", e)
print(pd.to_numeric(lei, errors="coerce"))
print()
corectat = pd.to_numeric(lei.str.replace(",", "."), errors="coerce")
print(corectat)
print("Valori lipsă:", corectat.isna().sum())
Rezultat
astype: could not convert string to float: 'n/a'
0 120.0
1 NaN
2 NaN
3 300.0
dtype: float64
0 120.0
1 NaN
2 12.5
3 300.0
dtype: float64
Valori lipsă: 1
Exemplul 3: Întregi cu valori lipsă: tipul Int64
import pandas as pd
bucati = pd.Series([3, None, 5])
print(bucati.dtype)
print(bucati.astype("Int64"))
Rezultat
float64
0 3
1 <NA>
2 5
dtype: Int64
Greșeli frecvente
- Convertești cu
astype(int)o coloană cuNaN: primeștiIntCastingNaNError. Completează lipsurile cufillna()sau folosește"Int64". - Numere scrise cu virgulă zecimală („12,5”) nu sunt înțelese de
astype(float)sauto_numeric. Înlocuiește virgula cu.str.replace(",", ".")sau citește fișierul cudecimal=","înread_csv. - Uiți să atribui rezultatul:
df["an"].astype(int)singur nu schimbă tabelul. Scriedf["an"] = df["an"].astype(int).
Comenzi înrudite
dtypes / select_dtypes(): dtypes arată tipul fiecărei coloane; select_dtypes păstrează doar coloanele de anumite tipuri (numere, text, date).DataFrame.info(): Afișează un rezumat al tabelului: numărul de rânduri, coloanele, câte valori completate are fiecare, tipurile și memoria.fillna() / ffill() / bfill(): Completează valorile lipsă cu o valoare fixă, cu valori diferite pe coloane, cu media sau cu valoarea anterioară ori următoare.pd.read_csv(): Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.
Întrebări & Exemple de Cod:
DataFrame.astype() și pd.to_numeric()Ai o nelămurire despre utilizarea comenzii
DataFrame.astype() și pd.to_numeric()sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.