Ce face dropna()
dropna() întoarce tabelul fără rândurile care conțin valori lipsă. Implicit (how="any") e suficientă o singură valoare lipsă ca rândul să dispară, ceea ce poate șterge mai mult decât te aștepți.
Trei parametri controlează ce se șterge: how="all" șterge doar rândurile complet goale, subset se uită doar la coloanele alese (de exemplu doar telefon), iar thresh=n păstrează rândurile care au cel puțin n valori existente. how și thresh nu se folosesc împreună.
Cu axis=1 se șterg coloanele cu valori lipsă în loc de rânduri. Metoda întoarce un tabel nou; parametrul inplace este depreciat în pandas 3.1, deci atribuie rezultatul: df = df.dropna().
Parametri
| Parametru | Descriere |
|---|---|
axis |
0 sau "index" (implicit) șterge rânduri; 1 sau "columns" șterge coloane. |
how |
"any" (implicit): șterge dacă există cel puțin o lipsă. "all": șterge doar dacă toate valorile lipsesc. |
thresh |
Numărul minim de valori nelipsă pe care trebuie să le aibă un rând ca să rămână. Nu se combină cu how. |
subset |
Coloanele (la ștergerea de rânduri) în care se caută valori lipsă. Celelalte coloane sunt ignorate. |
ignore_index |
Cu True (pandas 2.0+) rândurile rămase sunt renumerotate 0, 1, 2, … |
Ce returnează
Un DataFrame nou, fără rândurile sau coloanele eliminate.
Exemple
Exemplul 1: how=”any” și how=”all”
Implicit rămâne doar Ana, singura fără lipsuri. Cu how="all" dispare doar rândul 3, care e complet gol.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", None, None],
"oras": ["Iași", None, "Cluj", None],
"varsta": [25, 31, None, None],
})
print(df.dropna())
print()
print(df.dropna(how="all"))
Rezultat
nume oras varsta
0 Ana Iași 25.0
nume oras varsta
0 Ana Iași 25.0
1 Mihai NaN 31.0
2 NaN Cluj NaN
Exemplul 2: Doar anumite coloane: subset
Vrei doar clienții care au telefon. Lipsa emailului nu contează, deci rămân Ana și Ioana. ignore_index=True renumerotează rândurile.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Radu"],
"email": ["ana@exemplu.ro", "mihai@exemplu.ro", None, None],
"telefon": ["0740111222", None, "0730222333", None],
})
print(df.dropna(subset=["telefon"], ignore_index=True))
Rezultat
nume email telefon
0 Ana ana@exemplu.ro 0740111222
1 Ioana NaN 0730222333
Exemplul 3: thresh și ștergerea coloanelor
Cu thresh=2 rămân rândurile cu cel puțin două valori completate (Radu are doar una). Cu axis=1 și how="all" dispare coloana fax, care e complet goală.
import pandas as pd
import numpy as np
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Radu"],
"oras": ["Iași", None, None],
"varsta": [25, 31, None],
"fax": [np.nan, np.nan, np.nan],
})
print(df.dropna(thresh=2))
print()
print(df.dropna(axis=1, how="all"))
Rezultat
nume oras varsta fax
0 Ana Iași 25.0 NaN
1 Mihai NaN 31.0 NaN
nume oras varsta
0 Ana Iași 25.0
1 Mihai NaN 31.0
2 Radu NaN NaN
Greșeli frecvente
- Rulezi
df.dropna()pe un tabel cu multe coloane și pierzi aproape toate rândurile, pentru că fiecare rând are o lipsă undeva. Verifică întâi cudf.isna().sum()și foloseștesubset. - Te aștepți ca
df.dropna()să modificedf. Metoda întoarce un tabel nou:df = df.dropna().inplace=Trueeste depreciat în pandas 3.1 și afișează un avertisment. - Combini
how="all"cuthreshși primeștiTypeError: alege doar unul dintre ele.
Comenzi înrudite
isna() / notna(): Arată care valori lipsesc (NaN, None, NaT) dintr-un tabel; cu isna().sum() afli câte lipsesc în fiecare coloană.fillna() / ffill() / bfill(): Completează valorile lipsă cu o valoare fixă, cu valori diferite pe coloane, cu media sau cu valoarea anterioară ori următoare.duplicated() / drop_duplicates(): Găsește rândurile repetate și le elimină, după toate coloanele sau doar după cele alese, păstrând prima sau ultima apariție.Filtrare cu condiții (boolean indexing): Păstrează doar rândurile care îndeplinesc o condiție, cu operatorii &, |, ~ pentru condiții compuse și Series.between pentru intervale.
Întrebări & Exemple de Cod:
dropna()Ai o nelămurire despre utilizarea comenzii
dropna()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.