← CS Lab Data Science & Statistics / pandas Boolean Filtering Open standalone ↗

Boolean filtering keeps only the rows where a condition is true. You build a column of True/False — one value per row — hand it back to the DataFrame, and pandas returns just the True rows.

Where you meet it

What it does

It turns a question you'd ask about each row ("is age over 30?") into a column of yes/no answers, then uses that column to pick rows. No loop, no if — the whole table is tested at once.

The mask is just a column of yes/no answers — you never loop, you test the whole table at once.

How it works

A comparison on a column is applied to every element and gives back a mask — a Series of booleans:

mask = df['age'] > 30        # → [False, True, True, False, ...]
df[mask]                     # rows where mask is True
df[df['age'] > 30]           # the same thing, in one line

Combine conditions with & (and), | (or), ~ (not) — each condition in its own parentheses:

df[(df['age'] > 30) & (df['city'] == 'Berlin')]

The mask is matched to the rows by index, so it must line up with the frame you apply it to.

Watch out

  • Use & / |, not Python's and / or — those raise an error on a Series.
  • Wrap every condition in parentheses. & binds tighter than >, so without them the expression is parsed wrong.
  • It's == for "equals", not =.
  • Filtering then assigning can trigger a SettingWithCopyWarning — use .loc[mask, 'col'] = ... to be safe.

Go deeper

Boolean Filtering behält nur die Zeilen, in denen eine Bedingung wahr ist. Du baust eine Spalte aus True/False — ein Wert pro Zeile —, gibst sie an den DataFrame zurück, und pandas liefert nur die True-Zeilen.

Wo es vorkommt

Was es tut

Es verwandelt eine Frage, die du über jede Zeile stellst ("ist das Alter über 30?"), in eine Spalte aus Ja/Nein-Antworten und benutzt diese Spalte, um Zeilen auszuwählen. Keine Schleife, kein if — die ganze Tabelle wird auf einmal geprüft.

Die Maske ist nur eine Spalte aus Ja/Nein — du schleifst nie, du prüfst die ganze Tabelle auf einmal.

Wie es funktioniert

Ein Vergleich auf einer Spalte wird auf jedes Element angewandt und ergibt eine Maske — eine Series aus Booleans:

mask = df['age'] > 30        # → [False, True, True, False, ...]
df[mask]                     # Zeilen, in denen mask True ist
df[df['age'] > 30]           # dasselbe, in einer Zeile

Bedingungen verknüpfst du mit & (und), | (oder), ~ (nicht) — jede Bedingung in eigenen Klammern:

df[(df['age'] > 30) & (df['city'] == 'Berlin')]

Die Maske wird über den Index den Zeilen zugeordnet, muss also zum DataFrame passen, auf den du sie anwendest.

Worauf achten

  • Nimm & / |, nicht Pythons and / or — die werfen bei einer Series einen Fehler.
  • Jede Bedingung einklammern. & bindet stärker als >, ohne Klammern wird der Ausdruck falsch ausgewertet.
  • "Gleich" ist ==, nicht =.
  • Filtern und dann zuweisen kann eine SettingWithCopyWarning auslösen — sicher ist .loc[mask, 'col'] = ....

Mehr dazu

Next up
Data Science & Statisticspandas groupby Data Science & Statisticspandas Missing Data All concepts →