Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

Filtrare cu condiții (boolean indexing) în pandas

Păstrează doar rândurile care îndeplinesc o condiție, cu operatorii &, |, ~ pentru condiții compuse și Series.between pentru intervale.

Sintaxă
df[df["coloana"] > valoare]
df[(conditie1) & (conditie2)]
df[(conditie1) | (conditie2)]
df[~conditie]
s.between(stanga, dreapta, inclusive='both')

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.
&amp;, |, ~ Ș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âi 8 & 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.
Comunitate & Schimb de cunoștințe

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

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.