W tej lekcji, zajmiemy się przeglądaniem oraz modyfikacją DataFrame z użyciem indeksów. Poznamy nowe funkcje loc oraz iloc, oraz jeszcze mocniej rozpalimy naszą miłość do Pandas. Zaczynajmy!

Zbiorem danych który będziemy używać w tej lekcji jest zbiór danych o najpopularniejszych kostiumach na Halloween w US, per region. Kolumna o nazwie '1′ oznacza najbardziej popularny kostium, o nazwie '2′, drugi pod kątem popularności itd

import pandas as pd
kostium = pd.read_csv('https://analityk.edu.pl/wp-content/uploads/2020/12/Halloween.csv', header=2)
kostium.head()

Generalnie nie będziemy komentować słuszności wyborów strojów na Halloween. Nie wiem dlaczego ktoś się ma przebierać za królika (wiersz 4) ale też wszystkiego wiedzieć nie muszę 🙂 Natomiast sam zbiór jest całkiem ciekawy.

Przeglądanie DataFrame z użyciem []

Umiemy już przeglądać DataFrame za pomocą nawiasów kwadratowych i specyfikowania w nich zakresu wierszy który nas interesuje lub kolumn. Dla przykładu:

# Pięć pierwszych wierszy

kostium[:5]

# 10 pierwszych wierszy i tylko i wyłącznie kolumny region oraz '1', czyli najpopularniejszy kostium

kostium[:10][['region','1']]

Jest to bardzo wygodne i podobne do przeglądania list.

Czy możemy modyfikować wartości w ten sposób? Powiedzmy że chcemy zamienić nieszczęsnego królika w wierszu czwartym na strój Batmana, za pomocą nawiasów kwadratowych:

kostium[3:4]['1'] = 'Batman'

Jednak w wyniku otrzymamy błąd:

Dzieje się tak, dlatego gdyż pierwsza użycie nawiasów kwadratowych powoduje utworzenie kopii zbioru halloween, ograniczonej do rekordów podanych w nawiasach. Następnie próbujemy w tej kopii zmodyfikować kolumnę '1′, co finalnie nie ma żadnego wpływu na zbiór oryginalny.

Czy to oznacza że nie uda nam się zamienić stroju Królika na stój Batmana i uratować honor regionu Arizona?!

Spokojnie, uda nam się, ale zanim to zrobimy musimy zapoznać się z dodatkowymi mechanizmami dostępnymi do naszej dyspozycji w Pandas, takimi jak indeksy czy też funkcja loc. Lets do it.

.

.

.

Indeksy

O Indeksach troszkę już rozmawialiśmy w poprzednich lekcjach. Generalnie możemy porównać indeksy do adresu danego wiersza. W naszym przypadku są to liczby w skrajnej lewej kolumnie, zaczynające się od 0:

Możemy potwierdzić ten fakt za pomocą wartości index:

kostium.index

Kolumnę z indeksem możemy zmienić, na inną. Na pierwszy rzut oka kolumna 'region', wydaje się dobra.

Ważną cechą indeksu jest jego unikalność. Pod jednym adresem powinien być tylko jeden rekord. Ma to sens. Sprawdźmy czy kolumna 'region', zawiera unikalne wartości:

kostium.region.is_unique

Prosta sztuczka i już wiemy że kolumna posiada wartości unikalne, gdyż w wyniku otrzymaliśmy:

A tym samym możemy zamienić indeks z liczbowego znajdującego się w lewej kolumnie, na kolumnę region:

kostium.set_index('region', inplace=True)

I jak zobaczymy stary index znikną, natomiast kolumna 'region' stała się naszym nowym indexem:

Taka zamiana powoduje, nie tylko to, że nasza tabela wygląda lepiej, ale jak się przekonamy w kolejnej części lekcji, może nam znacząco ułatwić odwoływania się do poszczególnych wierszy.

Gdybyśmy na tym etapie postanowili jednak powrócić do poprzedniego indexu, mamy do dyspozycji funkcję reset_index(), która nam to ułatwi:

kostium = kostium.reset_index()
# lub 
kostium.reset_index(inplace=True)

I nasz zbiór wygląda jak gdyby nigdy nic się nie stało:

Dobrze, to była krótka teoria na temat indeksów. Czas przejść do ich praktycznego zastosowania, czyli do zamiany kostiumy królika na Batmana.

Funkcja loc

Do tej pory przeglądaliśmy zbiór danych za pomocą []. Do dyspozycji mamy jeszcze inny sposób, mianowicie funkcję loc (nazwa od locate) . Funkcji tej będziemy w Pandas korzystać dość często, gdyż daje nam ona większe możliwości niż nawiasy kwadratowe.

W momencie użycia [:10], Pandas zwróci nam 10 pierwszych wierszy. Niezależnie jaki jest nasz index i czy będzie to liczba czy też region. Pandas czyta DataFrame, i 10 pierwszych rekordów na jakie natrafi, zostaje nam zwrócone.

Inaczej jest w przypadku funkcji loc. Funkcja loc, przeszukuje DataFrame po indexie.

Jeżeli nasz index jest liczbą, tak jak jak powyżej, to wywołanie funkcji loc[0:10]. Da nam identyczne wyniki jak samo użycie [:10] bez loc:

kostium.loc[:10]

Ale jeżeli zmienimy index, na kolumnę 'region', to już wykonanie loc[0:10], nie przyniesie takich jak powyższych rezultatów:

kostium = kostium.set_index('region')
kostium.loc[:10]

Otrzymaliśmy błąd, gdyż funkcja loc dziąła na bazie indeksów. A index nie jest już numeryczny, ale jest regionem.

Za to teraz, możemy odwołać się do wiersza na bazie nazwy regionu:

kostium.loc['Arizona']

Mało tego. Za pomocą funkcji loc możemy odwołać sie do konkretne kolumny. Malo tego, możemy zmienić jej wartość!

kostium.loc['Arizona', '1'] = 'Batman'

Widzimy że tym razem udało się nam zmienić najpopularniejszy kostium w regionie Arizona.

Taki sam efekt osiągnęli byśmy, z indeksem numerycznym, Po prostu napisali byśmy kostium.loc[3,’1′] = 'Batman', Zamiana indeksu na region ma jedynie nam ułatwić manewrowanie po DataFrame.

Funkcja iloc

Na koniec warto jeszcze wspomnieć o funkcji iloc, bardzo podobnej do loc, z tą różnicą, że funkcja iloc korzysta tylko i wyłącznie z wartości numerycznych indeksów. Nawet jeżeli indeks wierszy jest ustawiony na region i nawet jeżeli nasze kolumny mają nazwy, funkcją iloc przyjmie tylko numery wierszy i kolumn.

Dla przykładu, chcąc w powyższym zbiorze, odwołać się do wiersza czwartego i kolumny trzeciej, wywołanie funkcji iloc będzie miało postać iloc[3,2]:

kostium.iloc[3,2]

Podsumowanie

Tak jak widzimy funkcja loc dane nam zupełnie nowe możliwości względem []. Możemy równie łatwo odwołać sie do wierszy, skorzystać z indeksów oraz również modyfikować wartości komórek.

Jest to jeszcze nie koniec jej możliwości. Kolejne poznamy w dalszych lekcjach, a tym czasem zapraszam do wykonania kilku ćwiczeń.

Ćwiczenia

  1. Wyświetlić kolumny region oraz najpopularniejszy kostium dla pierwszych 20 wierszy

  2. Dla siódmego wiersza ustawić strój Batmana jako najpopularniejszy kostium

  3. Zmienić index na kolumnę 'region', a następnie dla regionu 'California' ustawić najpopularniejszy kostium jako 'Witch'

  4. Jakie są wszystkie kostiumy w naszym zbiorze danych?

Spis treści Pandas Tutorial / Kurs

  1. Pandas – Intro
  2. Pandas – przygotowanie środowiska pracy
  3. Pandas – tworzenie prostego DataFrame
  4. Pandas – odczyt i zapis do pliku
  5. Pandas – podstawowe informacje o DataFrame
  6. Pandas – indeksy oraz funkcja loc
  7. Pandas – maski
  8. Pandas – modyfikacje kolumn
  9. Pandas – funkcja apply
  10. Pandas – typy danych
  11. Pandas – grupowanie z groupby
  12. Pandas – unstack oraz tabele przestawne
  13. Pandas – łączenie zbiorów danych
  14. Pandas – SQL i bazy danych

Facebook Comments