Jak filtrować dane w Pandas?

Dowiedz się, jak skutecznie filtrować dane w Pandas — od podstawowych warunków logicznych po zaawansowane techniki selekcji i obsługi braków danych.
23 maja 2025
blog
Poziom: Podstawowy

Artykuł przeznaczony dla osób uczących się analizy danych w Pythonie, które chcą poznać podstawowe techniki filtrowania danych w Pandas.

Z tego artykułu dowiesz się

  • Jak filtrować wiersze w Pandas na podstawie pojedynczych i złożonych warunków logicznych?
  • Czym różnią się loc[] i iloc[] oraz kiedy używać każdej z tych metod do selekcji danych?
  • Jak filtrować dane tekstowe i poprawnie obsługiwać wartości brakujące (NaN) podczas filtrowania?

Wprowadzenie do filtrowania danych w Pandas

Filtrowanie danych to jedna z najważniejszych operacji podczas pracy z analizą danych w bibliotece Pandas. Polega na selekcji określonych wierszy lub kolumn w zależności od zadanych kryteriów. Dzięki temu możemy skupić się na interesujących nas fragmentach danych, wyodrębniać określone informacje, czy przygotowywać dane do dalszej analizy.

W Pandas filtrowanie może przyjmować różne formy – od prostych porównań kolumn po wykorzystanie bardziej zaawansowanych funkcji i operatorów. Popularnymi scenariuszami są m.in. wybór wierszy spełniających określone warunki logiczne, filtrowanie na podstawie wartości tekstowych lub liczbowych, a także obsługa brakujących danych.

Najczęściej do filtrowania wykorzystuje się operacje logiczne w połączeniu z indeksowaniem, np. przy użyciu nawiasów kwadratowych, funkcji loc[] lub iloc[]. Przykładowa operacja może wyglądać tak:

df[df['kolumna'] > 10]

W powyższym przykładzie filtrowane są wiersze, w których wartość w kolumnie kolumna przekracza 10. To tylko jedna z wielu możliwości, jakie oferuje Pandas w zakresie filtrowania danych.

Znajomość technik filtrowania jest kluczowa dla efektywnej pracy z danymi – pozwala nie tylko na ich przeglądanie i eksplorację, ale także przygotowywanie do dalszych transformacji, agregacji czy wizualizacji.

Filtrowanie wierszy na podstawie warunków logicznych

Filtrowanie danych w Pandas pozwala na selekcjonowanie tylko tych wierszy z DataFrame, które spełniają określone kryteria. Jednym z najczęściej stosowanych podejść jest wykorzystanie warunków logicznych – to technika, która umożliwia tworzenie masek logicznych (czyli tablic wartości True i False) na podstawie wartości w kolumnach.

Podstawowa zasada działania polega na stworzeniu wyrażenia logicznego, które porównuje wartości w kolumnie z określoną wartością. Wynik takiego porównania można bezpośrednio wykorzystać do filtrowania wierszy w obiekcie DataFrame. Możliwe jest też łączenie wielu warunków przy użyciu operatorów logicznych, takich jak & (AND), | (OR) czy ~ (NOT), co daje dużą elastyczność w definiowaniu bardziej złożonych kryteriów filtrowania.

Oto ogólna idea działania filtrowania:

  • Porównanie wartości kolumny do stałej lub innej kolumny (np. df['wiek'] > 30).
  • Tworzenie bardziej złożonych warunków z użyciem operatorów logicznych (np. (df['wiek'] > 30) & (df['płeć'] == 'K')).
  • Zastosowanie maski logicznej bezpośrednio do DataFrame w celu uzyskania przefiltrowanych danych (np. df[mask]).

Warto pamiętać, że warunki logiczne w Pandas muszą być konstruowane z uwzględnieniem odpowiednich operatorów bitowych, a ich składnia wymaga nawiasów wokół każdego warunku. Pozwala to uniknąć błędów składniowych i zapewnia poprawne działanie filtrów.

💡 Pro tip: Zawsze obejmuj każdy warunek nawiasami i używaj operatorów bitowych & | ~; do wielu wartości stosuj .isin(), a do zakresów .between() – to upraszcza i czytelniej definiuje maski.

Użycie operatorów porównania do selekcji danych

Filtrowanie danych w bibliotece pandas często opiera się na wykorzystaniu operatorów porównania, które pozwalają tworzyć logiczne warunki do selekcji konkretnych wierszy lub wartości.

Podstawowe operatory porównania stosowane w pandas są zgodne z tymi znanymi z języka Python:

Operator Znaczenie Przykład użycia
== równe df['kolumna'] == 10
!= różne df['kolumna'] != 'A'
> większe niż df['wiek'] > 30
< mniejsze niż df['wiek'] < 18
>= większe lub równe df['ocena'] >= 4.5
<= mniejsze lub równe df['ocena'] <= 3.0

Rezultatem zastosowania operatorów porównania jest seria wartości logicznych (True lub False), które można wykorzystać do filtrowania danych. Na przykład:

import pandas as pd

df = pd.DataFrame({
    'Imię': ['Anna', 'Bartek', 'Celina', 'Daniel'],
    'Wiek': [23, 35, 19, 42]
})

# Filtrowanie osób starszych niż 30 lat
df[df['Wiek'] > 30]

Dzięki tym operatorom można łatwo wyodrębnić interesujące nas dane na podstawie wartości liczbowych, tekstowych czy dat. W bardziej złożonych przypadkach można je również łączyć z operatorami logicznymi, co pozwala tworzyć złożone warunki selekcji. Jeśli chcesz dowiedzieć się więcej i pogłębić swoją wiedzę w praktyce, sprawdź Kurs Python - kompleksowa analiza danych w Pythonie z wykorzystaniem bibliotek Pandas, NumPy, Matplotlib i Scikit-Learn.

Zastosowanie funkcji loc[] i iloc[] do filtrowania

W bibliotece Pandas funkcje loc[] i iloc[] służą do precyzyjnego wybierania danych z ramki danych (DataFrame) na podstawie etykiet lub pozycji. Obie metody umożliwiają filtrowanie zarówno wierszy, jak i kolumn, ale różnią się sposobem dostępu do danych:

Metoda Rodzaj indeksowania Typy danych wejściowych
loc[] Indeksowanie etykietami Indeksy tekstowe, warunki logiczne, listy etykiet
iloc[] Indeksowanie pozycyjne (liczbowe) Numeryczne pozycje, zakresy, listy pozycji

loc[] jest przydatne, gdy chcemy odwołać się do danych według ich nazw (np. nazw kolumn lub indeksów). Możemy w ten sposób wybierać dane w sposób deklaratywny i często bardziej czytelny:

df.loc[df['kategoria'] == 'Elektronika']

iloc[] z kolei pozwala na wybór danych według ich pozycji liczbowej w ramce danych. Jest to szczególnie przydatne, gdy nie znamy etykiet kolumn lub indeksów, a chcemy odwołać się do pozycji z góry określonych:

df.iloc[0:5, 1:3]

Obie funkcje wspierają również bardziej zaawansowane operacje, takie jak wybieranie konkretnych kolumn, fragmentów wierszy czy stosowanie warunków logicznych. Poniżej krótkie porównanie ich możliwości:

  • loc[]: wybór na podstawie etykiet – np. nazw kolumn i indeksów.
  • iloc[]: wybór na podstawie pozycji – np. numeru kolumny czy wiersza.

Znajomość różnic między loc[] a iloc[] pozwala na bardziej elastyczne i wydajne filtrowanie danych w Pandas.

💡 Pro tip: Preferuj loc do pracy po etykietach (także z maskami), np. df.loc[mask, cols]. Pamiętaj, że iloc używa indeksowania wyłącznie pozycyjnego, a zakresy w slice są prawostronnie otwarte.

Filtrowanie danych tekstowych

W pracy z danymi tekstowymi w Pandas często zachodzi potrzeba selekcji wierszy na podstawie wartości typu string. Może to obejmować wyszukiwanie konkretnych fraz, dopasowań do wzorców lub filtrowanie na podstawie warunków tekstowych, takich jak zawieranie fragmentu tekstu czy porównanie słów.

Pandas oferuje szereg wygodnych metod do pracy z danymi tekstowymi, wykorzystując funkcję str, która umożliwia wykonywanie operacji tekstowych na kolumnach typu object lub string.

Najczęściej używane metody filtrowania danych tekstowych to:

  • str.contains() – sprawdzanie, czy tekst zawiera daną frazę,
  • str.startswith() i str.endswith() – filtrowanie na podstawie początku lub końca tekstu,
  • str.match() – dopasowanie do wyrażenia regularnego (regex),
  • str.lower() i str.upper() – ujednolicanie wielkości liter w celu porównań.

Poniżej znajduje się prosty przykład filtrowania danych tekstowych:

import pandas as pd

df = pd.DataFrame({
    'nazwa': ['Warszawa', 'Kraków', 'Gdańsk', 'Wrocław', 'Katowice']
})

# Filtrowanie miast zawierających literę "a"
df[df['nazwa'].str.contains('a')]

Dobrą praktyką jest stosowanie parametru na=False w metodach tekstowych, aby uniknąć błędów przy wartościach NaN.

Poniższa tabela porównuje wybrane metody tekstowe:

Metoda Opis Przykład
str.contains('fraza') Sprawdza, czy ciąg zawiera daną frazę df[col].str.contains('abc')
str.startswith('prefix') Sprawdza, czy ciąg zaczyna się od danego prefiksu df[col].str.startswith('pre')
str.endswith('sufix') Sprawdza, czy ciąg kończy się na dany sufix df[col].str.endswith('xyz')

Filtrowanie tekstowe to istotna część analizy danych, szczególnie w przypadku danych nieustrukturyzowanych lub zawierających opisy, kategorie czy identyfikatory alfanumeryczne. Jeśli chcesz pogłębić wiedzę na temat analizy danych w Pythonie, sprawdź Kurs Python – praktyczne wykorzystanie Pythona do analizy danych i automatyzacji.

Obsługa wartości null i brakujących danych

Podczas pracy z danymi w Pandas często napotykamy na wartości null lub brakujące, czyli takie, które nie zostały dostarczone, są puste albo z jakiegoś powodu nie mogły zostać poprawnie zaimportowane. W Pandas brakujące dane są zazwyczaj oznaczane jako NaN (ang. Not a Number), co jest zgodne ze standardem NumPy.

Skuteczne filtrowanie danych wymaga umiejętnego rozpoznawania i obsługi takich wartości. Najczęściej wykorzystuje się do tego funkcje isnull() oraz notnull(), które zwracają maski logiczne informujące o obecności braków danych.

import pandas as pd

# Przykładowy DataFrame
df = pd.DataFrame({
    'Imię': ['Anna', 'Marcin', None, 'Julia'],
    'Wiek': [28, None, 35, 22]
})

# Filtrowanie wierszy z brakującym wiekiem
df[df['Wiek'].isnull()]

Innym podejściem jest usuwanie lub uzupełnianie brakujących wartości. W tym celu stosuje się metody dropna() (usuwa wiersze lub kolumny z brakami) oraz fillna() (uzupełnia je określoną wartością).

# Usunięcie wierszy z brakującymi danymi
czysty_df = df.dropna()

# Uzupełnienie braków wartością domyślną
uzupelniony_df = df.fillna({'Imię': 'Nieznane', 'Wiek': 0})

Poniższa tabela przedstawia porównanie podstawowych metod obsługi braków danych:

Metoda Opis Zastosowanie
isnull() Sprawdza, czy dana wartość to NaN Filtrowanie lub diagnostyka braków
notnull() Sprawdza, czy wartość NIE jest NaN Wyodrębnienie pełnych danych
dropna() Usuwa brakujące dane Przygotowanie danych do analizy
fillna() Uzupełnia braki daną wartością Utrzymanie kompletności danych

Rozpoznanie i odpowiednia reakcja na obecność brakujących danych stanowi kluczowy krok w procesie filtrowania, ponieważ nieprzefiltrowane wartości NaN mogą prowadzić do błędnych wniosków lub błędów wykonania.

💡 Pro tip: Porównania z NaN zawsze zwracają False — do filtrów używaj isna()/notna() lub argumentu na= w metodach jak str.contains. Przy dropna() podaj subset, by nie usuwać wierszy z brakami w nieistotnych kolumnach, a przy fillna() dobierz typ (np. pd.NA dla kolumn nullable).

Praktyczne przykłady i najczęstsze przypadki użycia

Filtrowanie danych w bibliotece Pandas to jedna z najczęściej wykorzystywanych operacji w analizie danych. Pozwala wyodrębnić interesujące nas fragmenty zbioru danych na podstawie określonych warunków. W praktyce istnieje wiele scenariuszy, w których filtrowanie okazuje się niezwykle przydatne.

  • Wybór danych z określonym przedziałem wartości – na przykład wyodrębnienie wszystkich transakcji powyżej określonej kwoty lub osób w konkretnym przedziale wiekowym.
  • Filtrowanie na podstawie kategorii – np. uzyskanie wszystkich rekordów, które należą do danej kategorii, jak „elektronika” lub „spożywcze”.
  • Wyszukiwanie brakujących lub niekompletnych danych – identyfikacja wierszy z wartościami null w celu ich dalszego przetworzenia lub usunięcia.
  • Ekstrakcja danych tekstowych – np. wyszukiwanie wszystkich wierszy zawierających konkretne słowo lub zaczynających się od danego prefiksu.
  • Filtrowanie warunkowe złożone – łączenie wielu warunków logicznych (np. wiek > 30 i płeć == 'K') w celu uzyskania dokładnie sprecyzowanego podzbioru danych.
  • Dynamiczne filtrowanie z użyciem funkcji – stosowanie funkcji lambda lub metod wbudowanych do przetwarzania i selekcji danych w czasie rzeczywistym.

W codziennej pracy z Pandas filtrowanie umożliwia szybkie odnalezienie interesujących danych i przygotowanie ich do dalszej analizy, wizualizacji lub modelowania. Umiejętne stosowanie filtrów znacząco zwiększa efektywność analizy danych i pozwala na lepsze zrozumienie badanego zbioru.

Podsumowanie i dobre praktyki

Filtrowanie danych w Pandas to jedna z najważniejszych umiejętności w analizie danych. Pozwala na szybkie wyodrębnienie interesujących nas informacji, co jest kluczowe w procesie eksploracji i przygotowywania danych do dalszej analizy.

Najczęściej używane metody filtrowania to stosowanie warunków logicznych, wykorzystanie indeksowania za pomocą loc[] oraz iloc[], a także operacje na wartościach tekstowych i obsługa brakujących danych. Każde z tych podejść znajduje zastosowanie w innych kontekstach: od prostych selekcji po złożone operacje na dużych zbiorach danych.

Podczas pracy z filtrowaniem warto pamiętać o kilku dobrych praktykach:

  • Zwracaj uwagę na typy danych — niepoprawne porównania mogą prowadzić do błędnych wyników.
  • Unikaj bezpośredniej modyfikacji oryginalnych danych — zamiast tego pracuj na kopiach, aby łatwiej cofnąć zmiany.
  • Używaj wyraźnych i czytelnych warunków — poprawia to zrozumiałość kodu i ułatwia jego konserwację.
  • Testuj filtrowanie na mniejszych fragmentach danych — umożliwia to szybsze wykrycie ewentualnych błędów.

Dobre zarządzanie filtrowaniem pozwala na skuteczne zawężenie danych i skupienie się na tym, co istotne. To podstawowy krok do przejrzystej i efektywnej analizy danych.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments