Ce face isna() / notna()
isna() întoarce un tabel de aceeași formă, cu True acolo unde valoarea lipsește și False în rest. notna() face invers. pandas consideră lipsă NaN, None, NaT (dată lipsă) și pd.NA. isnull() și notnull() sunt nume vechi pentru aceleași metode.
Cel mai des le folosești combinate: df.isna().sum() spune câte valori lipsesc pe fiecare coloană (True contează ca 1), iar df[df["email"].isna()] afișează doar rândurile fără email.
Un șir gol "" sau un spațiu nu sunt valori lipsă pentru pandas. Funcția pd.isna(x) verifică și o singură valoare.
Parametri
| Parametru | Descriere |
|---|---|
(fără parametri) |
Metodele isna() și notna() pe DataFrame și Series nu primesc argumente. pd.isna(obj) primește o valoare, o listă, o serie sau un tabel. |
Ce returnează
Un DataFrame sau o Series de valori bool, de aceeași formă. pd.isna pe o singură valoare întoarce un bool.
Exemple
Exemplul 1: Unde lipsesc valori
Mihai nu are oraș, iar Ioana nu are vârstă. isna() marchează aceste celule cu True, notna() marchează restul.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana"],
"oras": ["Iași", None, "Cluj"],
"varsta": [25, 31, None],
})
print(df)
print()
print(df.isna())
print()
print(df.notna())
Rezultat
nume oras varsta
0 Ana Iași 25.0
1 Mihai NaN 31.0
2 Ioana Cluj NaN
nume oras varsta
0 False False False
1 False True False
2 False False True
nume oras varsta
0 True True True
1 True False True
2 True True False
Exemplul 2: Câte lipsesc pe coloană și filtrarea rândurilor
isna().sum() numără valorile lipsă pe fiecare coloană. any(axis=1) spune dacă rândul are cel puțin o lipsă, iar ultima filtrare arată clienții fără email.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Radu"],
"email": ["ana@exemplu.ro", None, None, "radu@exemplu.ro"],
"telefon": ["0740111222", "0730222333", None, None],
})
print(df.isna().sum())
print()
print(df[df.isna().any(axis=1)])
print()
print(df[df["email"].isna()])
Rezultat
nume 0
email 2
telefon 2
dtype: int64
nume email telefon
1 Mihai NaN 0730222333
2 Ioana NaN NaN
3 Radu radu@exemplu.ro NaN
nume email telefon
1 Mihai NaN 0730222333
2 Ioana NaN NaN
Exemplul 3: Ce înseamnă „lipsă” pentru pandas
None și NaN sunt lipsă, dar șirul gol nu. Ca să tratezi și șirurile goale ca lipsă, le înlocuiești întâi cu None.
import pandas as pd
import numpy as np
print(pd.isna(None), pd.isna(np.nan), pd.isna(""), pd.isna(0))
s = pd.Series(["Iași", "", None, "Cluj"])
print(s.isna().sum())
print(s.replace("", None).isna().sum())
Rezultat
True True False False
1
2
Greșeli frecvente
- Verifici valorile lipsă cu
df["oras"] == Nonesau== np.nan: comparația dă mereuFalse, pentru căNaNnu este egal nici cu el însuși. Foloseșteisna(). - Crezi că șirurile goale sau
"N/A"scrise în fișier sunt valori lipsă.""nu este; la citire,read_csvtransformă implicit în lipsă doar anumite texte ("NA","N/A", câmp gol etc.). - Folosești
df.isna().sum()și te aștepți la un singur număr: primești câte un număr pe coloană. Totalul estedf.isna().sum().sum().
Comenzi înrudite
fillna() / ffill() / bfill(): Completează valorile lipsă cu o valoare fixă, cu valori diferite pe coloane, cu media sau cu valoarea anterioară ori următoare.dropna(): Șterge rândurile (sau coloanele) care au valori lipsă: oricare, doar complet goale sau doar în anumite coloane.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.pd.read_csv(): Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.
Întrebări & Exemple de Cod:
isna() / notna()Ai o nelămurire despre utilizarea comenzii
isna() / notna()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.