Poznaliśmy wyświetlanie zawartości DataFrame za pomocą [] oraz funkcji loc. Nasze możliwości były jednak ograniczone do wyświetlania wierszy których lokalizacje lub index znaliśmy. W tej lekcji poznamy maski, które drastycznie rozszerzą nasze możliwości o wyświetlanie i modyfikację wierszy na bazie wartości kolumn.
Skorzystamy ze zbioru danych Halloween, który już znamy i lubimy.
import pandas as pd kostium = pd.read_csv('https://analityk.edu.pl/wp-content/uploads/2020/12/Halloween.csv', header=2) kostium.head()
Wyszukanie wartości za pomocą pętli for
Zanim przejdziemy do tematów maski, zastanowimy się nad jednym zadaniem. Otóż musimy w naszym zbiorze znaleźć wszystkie regiony, w których najpopularniejszym kostiumem na Halloween jest 'Rabbit’ (kolumna 1)
Naturalnym podejściem do zagadnienia było by zastosowanie pętli for, oraz przeglądanie naszego DataFrame w poszukiwaniu wartości 'Rabbit’.
Możemy skorzystać z funkcji iterrow(), która zwróci nam kolejne wiersze:
for index, zawartosc in kostium.iterrows(): if zawartosc['1'] == 'Rabbit': print(zawartosc['region'])
W wyniku otrzymamy:
Zadanie wykonane, ale mało elegancko oraz BARDZO mało efektywnie. Gdyby nasz zbiór był większy, np ponad 10 tysięcy rekordów, to nasz Jupyter Notebook zawiesił by się na dłuższą chwilę.
Możemy to samo zadanie wykonać krócej, łatwiej i o WIELE bardziej efektywnie, właśnie za pomocą masek.
Prosta maska
Spójrzmy co się stanie, kiedy wykonany prosty kod:
kostium['1'] == 'Rabbit'
Otrzymamy informację dla którego wiersza powyższe wyrażenie warunkowe jest prawdziwe, a dla którego nie:
Widzimy że otrzymaliśmy wartość True dla wiersza 4 o indexie 3. Jeżeli spojrzymy na nasz DataFrame, to zobaczymy, że wszystko się zgadza.
Teraz. Powyższy wynik, możemy wykorzystać jako właśnie naszą tytułową maskę, która nałożymy na nasz DataFrame. W ten sposób:
kostium[ kostium['1'] == 'Rabbit' ]
Umieściliśmy ją w nawiasach [] naszego DataFrame, natomiast rezultat wygląda następująco:
Wygląda o wiele zgrabniej niż pętla for, jednocześnie jest o wiele bardziej wydajne.
Maski bardziej rozbudowane
Maski można ze sobą łączyć i na siebie nakładać, budując bardziej złożone wyrażenia warunkowe. Zupełnie jak w wyrażeniu warunkowym if, gdzie mogliśmy używać operatora and lub operator or.
W maskach zamiast and używamy &, oraz zamiast or używamy |. Zobaczmy:
Znajdźmy regiony w których najpopularniejszym kostiumem jest 'Rabbit’ lub 'Dinosaur’.
kostium[ (kostium['1'] == 'Rabbit') | (kostium['1'] == 'Dinosaur') ]
Znajdźmy regiony w których najpopularniejszym kostiumem jest 'Rabbit’, a drugim najpopularniejszym 'Pirate’.
kostium[ (kostium['1'] == 'Rabbit') & (kostium['2'] == 'Pirate') ]
Podsumowanie
Maski to elegancki i potężny mechanizm w Pandas. Można na nie patrzeć ja na filtry w Excel na sterydach. Jest to coś z czego będziemy korzystać bardzo często.
Ćwiczenia
-
wydrukować regiony w których najpopularniejszym kostiumem jest 'Witch’, natomiast drugi najpopularniejszym jest 'Ninja’
-
policzyć regiony które jako najpopularniejszy kostium mają 'Dinosaur’ lub 'Angel’
Spis treści Pandas Tutorial / Kurs
- Pandas – Intro
- Pandas – przygotowanie środowiska pracy
- Pandas – tworzenie prostego DataFrame
- Pandas – odczyt i zapis do pliku
- Pandas – podstawowe informacje o DataFrame
- Pandas – indeksy oraz funkcja loc
- Pandas – maski
- Pandas – modyfikacje kolumn
- Pandas – funkcja apply
- Pandas – typy danych
- Pandas – grupowanie z groupby
- Pandas – unstack oraz tabele przestawne
- Pandas – łączenie zbiorów danych
- Pandas – SQL i bazy danych