Ce face DataFrame.where() și DataFrame.mask()
Filtrarea cu o mască scoate rândurile. where și mask păstrează toate rândurile și schimbă doar valori. s.where(cond) păstrează valorile unde cond este True și pune NaN (sau valoarea din other) în rest. s.mask(cond) face invers: înlocuiește valorile unde cond este True.
Parametrul other poate fi o valoare fixă, un alt Series / DataFrame sau o funcție. Atenție: dacă o coloană de numere întregi primește NaN, tipul ei devine float64.
Parametri
| Parametru | Descriere |
|---|---|
cond |
O mască booleană (Series sau DataFrame) sau o funcție care primește datele și returnează masca. |
other |
Ce se pune în locul valorilor înlocuite. Implicit valoare lipsă (NaN). |
axis, level |
Alinierea lui other când este un Series aplicat pe un DataFrame. |
Ce returnează
Un obiect nou, de aceeași formă ca cel inițial.
Exemple
Exemplul 1: where și mask pe o coloană de note
where păstrează notele de trecere și pune NaN la celelalte (tipul devine float64); mask înlocuiește notele sub 5 cu 5.
import pandas as pd
note = pd.Series([9, 4, 7, 3, 10], index=["Ana", "Mihai", "Ioana", "Andrei", "Elena"])
print(note.where(note >= 5))
print()
print(note.mask(note < 5, 5))
Rezultat
Ana 9.0
Mihai NaN
Ioana 7.0
Andrei NaN
Elena 10.0
dtype: float64
Ana 9
Mihai 5
Ioana 7
Andrei 5
Elena 10
dtype: int64
Exemplul 2: Plafonarea valorilor dintr-un tabel
Vânzările peste 2000 de lei sunt înlocuite cu 2000. Apoi mask ascunde (pune NaN) valorile sub 1500. Toate rândurile și coloanele rămân.
import pandas as pd
vanzari = pd.DataFrame(
{"Iași": [1200, 2500, 1800], "Cluj": [3100, 1900, 2000]},
index=["ian", "feb", "mar"],
)
print(vanzari.where(vanzari <= 2000, 2000))
print()
print(vanzari.mask(vanzari < 1500))
Rezultat
Iași Cluj
ian 1200 2000
feb 2000 1900
mar 1800 2000
Iași Cluj
ian NaN 3100
feb 2500.0 1900
mar 1800.0 2000
Greșeli frecvente
- Încurci cele două:
wherepăstrează valorile unde condiția este adevărată,maskle înlocuiește acolo. O regulă ușor de ținut minte:mask(cond)=where(~cond). - Te aștepți ca
wheresă scoată rândurile, ca un filtru. Rândurile rămân, doar valorile devinNaN; pentru a le scoate foloseștedf[masca]. - Nu observi că o coloană de întregi a devenit
float64după ce a primitNaN. Dă o valoare înothersau convertește după aceea.
Comenzi înrudite
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.fillna() / ffill() / bfill(): Completează valorile lipsă cu o valoare fixă, cu valori diferite pe coloane, cu media sau cu valoarea anterioară ori următoare.DataFrame.replace(): Înlocuiește valori anume (o valoare, o listă, un dicționar) sau, cu regex=True, părți de text potrivite de o expresie regulată.
Întrebări & Exemple de Cod:
DataFrame.where() și DataFrame.mask()Ai o nelămurire despre utilizarea comenzii
DataFrame.where() și DataFrame.mask()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.