Ce face Filtrare cu condiții (boolean indexing)
O comparație pe o coloană, de exemplu df["nota"] > 8, nu dă un singur True sau False, ci un Series cu câte o valoare booleană pentru fiecare rând (o „mască”). Pusă între parantezele drepte ale tabelului, df[masca], masca păstrează doar rândurile cu True.
Condițiile se combină cu & (și), | (sau) și ~ (negație), nu cu and, or, not. Fiecare condiție trebuie pusă în paranteze, pentru că & și | se evaluează înaintea comparațiilor: df[(df["nota"] > 8) & (df["oras"] == "Iași")].
Series.between(a, b) este o scurtătură pentru (s >= a) & (s <= b). Parametrul inclusive alege dacă intră capetele: "both" (implicit), "neither", "left", "right". Rândurile păstrate își păstrează etichetele din index.
Parametri
| Parametru | Descriere |
|---|---|
masca |
Un Series boolean cu același index ca tabelul, obținut dintr-o comparație. |
&, |, ~ |
Și, sau, negație, aplicate element cu element pe măști. |
left, right (between) |
Capetele intervalului. |
inclusive (between) |
"both", "neither", "left" sau "right": ce capete sunt incluse. |
Ce returnează
Un DataFrame nou, doar cu rândurile pentru care masca este True. between returnează masca (un Series boolean).
Exemple
Exemplul 1: Masca și filtrul simplu
Prima afișare arată masca. A doua păstrează cele 2 rânduri cu nota peste 8.5; etichetele 0 și 3 rămân cele originale.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Andrei", "Elena"],
"oras": ["Iași", "Cluj", "Iași", "Cluj", "Brașov"],
"nota": [9.5, 7.0, 8.5, 9.0, 6.0],
})
masca = df["nota"] > 8.5
print(masca)
print()
print(df[masca])
Rezultat
0 True
1 False
2 False
3 True
4 False
Name: nota, dtype: bool
nume oras nota
0 Ana Iași 9.5
3 Andrei Cluj 9.0
Exemplul 2: Condiții compuse cu &, | și ~
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Andrei", "Elena"],
"oras": ["Iași", "Cluj", "Iași", "Cluj", "Brașov"],
"nota": [9.5, 7.0, 8.5, 9.0, 6.0],
})
print(df[(df["oras"] == "Iași") & (df["nota"] >= 9)])
print()
print(df[(df["nota"] < 7) | (df["oras"] == "Cluj")])
print()
print(df[~(df["oras"] == "Iași")].reset_index(drop=True))
Rezultat
nume oras nota
0 Ana Iași 9.5
nume oras nota
1 Mihai Cluj 7.0
3 Andrei Cluj 9.0
4 Elena Brașov 6.0
nume oras nota
0 Mihai Cluj 7.0
1 Andrei Cluj 9.0
2 Elena Brașov 6.0
Exemplul 3: Intervale cu between
Vânzările între 1000 și 2000 de lei, cu capetele incluse, apoi fără capete.
import pandas as pd
vanzari = pd.DataFrame({
"luna": ["ian", "feb", "mar", "apr", "mai"],
"lei": [850, 1000, 1450, 2000, 2300],
})
print(vanzari[vanzari["lei"].between(1000, 2000)])
print()
print(vanzari[vanzari["lei"].between(1000, 2000, inclusive="neither")])
Rezultat
luna lei
1 feb 1000
2 mar 1450
3 apr 2000
luna lei
2 mar 1450
Greșeli frecvente
- Folosești
and/or:df[(df["nota"] > 8) and (df["oras"] == "Iași")]aruncăValueError: The truth value of a Series is ambiguous. Folosește&și|. - Uiți parantezele:
df[df["nota"] > 8 & df["oras"] == "Iași"]calculează întâi8 & df["oras"]și dă eroare. - Te aștepți ca rezultatul să aibă indexul 0, 1, 2, … Rândurile filtrate își păstrează etichetele; adaugă
.reset_index(drop=True)dacă vrei numerotare nouă. - Modifici rezultatul filtrului crezând că schimbi tabelul original. Filtrul dă un tabel nou; pentru modificare folosește
df.loc[masca, "coloana"] = valoare.
Comenzi înrudite
DataFrame.query(): Filtrează rândurile cu o condiție scrisă ca text, de exemplu „nota > 8 and oras == ‘Iași'”, cu variabile prin @.Series.isin() și DataFrame.isin(): Verifică pentru fiecare valoare dacă se află într-o listă dată; util pentru a filtra rândurile după mai multe valori permise.DataFrame.loc: Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.DataFrame.where() și DataFrame.mask(): Păstrează forma tabelului și înlocuiesc valorile: where le păstrează unde condiția e adevărată, mask le înlocuiește acolo.
Întrebări & Exemple de Cod:
Filtrare cu condiții (boolean indexing)Ai o nelămurire despre utilizarea comenzii
Filtrare cu condiții (boolean indexing)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.