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.
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.
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.
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()istr.endswith()– filtrowanie na podstawie początku lub końca tekstu,str.match()– dopasowanie do wyrażenia regularnego (regex),str.lower()istr.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.
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.