DataFrame.where() și DataFrame.mask() în pandas

Păstrează forma tabelului și înlocuiesc valorile: where le păstrează unde condiția e adevărată, mask le înlocuiește acolo.

Sintaxă
df.where(cond, other=nan, *, axis=None, level=None)
df.mask(cond, other=nan, *, axis=None, level=None)

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ă: where păstrează valorile unde condiția este adevărată, mask le înlocuiește acolo. O regulă ușor de ținut minte: mask(cond) = where(~cond).
  • Te aștepți ca where să scoată rândurile, ca un filtru. Rândurile rămân, doar valorile devin NaN; pentru a le scoate folosește df[masca].
  • Nu observi că o coloană de întregi a devenit float64 după ce a primit NaN. Dă o valoare în other sau 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ă.
Comunitate & Schimb de cunoștințe

Î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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.