Funkcja Apply pozwala na o wiele bardziej rozbudowane operacje na rekordach DataFrame niż samo użycie nawiasów [] lub funcji loc. Koncepcja ten funkcji jest szeroko znana i stosowana w wielu bibliotekach do przetwarzania danych, natomiast jej opanowanie otworzy nam zupełnie nowe horyzonty.

Działanie funkcji apply

Funkcja apply pozwala nam na zdefiniowanie funkcji która ma być kolejno wykonywana dla każdego rekodru/wiersza w naszym DataFrama lub konkretnej kolumny. Jej zastosowanie składa się z 2 kroków:

  1. Utworzeniu funkcji, który przyjmie jako parametr wiersz z DataFrame lub wartość ze wskazanej kolumny, następnie zwróci wiersz zmodyfikowany, lub wartość zmodyfikowaną dla konkretnej kolumny
  2. Wywołaniu funkcji apply dla danego DataFrame, informując Pandas że chcemy dla każdego wiersza, wykonać wskazaną funkcję lub wykonać ją dla każdej wartości z konkretnej kolumny.

Funkcja apply dla pojedynczej kolumny

Zobaczmy jak to wygląda w praktyce. Zdefiniujmy przykładowy DataFrame:

df = pd.DataFrame({'Osoba':['Michał Jakub','Ewa Noga', 'Krzysztof Zawierucha'],
                  'Wynik':[15,38,21]})

Naszym zadaniem jest sprawdzić kto zdał egazgamin. Dla wyniku powyżej 20 punktów, należy zamienić ilość punktów na tekst 'Zdany’, w innym przypadku na tekst 'Oblany’.

Definiujemy funkcję która potem będzie wykonywana dla każdego wiersza, dla kolumny Wynik

def sprawdz(punkty):
        if punkty > 20: return 'Zdany'
        else: return 'Oblany'

Funkcja sprawdz, przyjmuje 1 parametr i również zwraca nam pojedynczą wartość.

Wykonujemy funkcję apply informując Pandas że dla każdej wartości z kolumny 'wynik’, chcemy wykonać sprawdz:

df.Wynik = df.Wynik.apply(sprawdz)

W rezultacie otrzymujemy:

Funkcja apply, dla całego wiersza

W poprzednim przykładnie wywołaliśmy funkcję apply dla jednej konkretnej kolumny – wynik. Możemy również wywołać funkcję apply, dla całego wiersza.

Dla przykładu. W naszym zbiorze, imię oraz nazwisko umieszczone jest w jednej kolumnie – osoba. Możemy rozdzielić je na 2 różne kolumny, właśnie za pomocą funkcji apply. W tym celu zdefiniujemy funkcję, która przyjmie jako parametr cały wiersz, a następnie wykonamy funkcję apply, informując Pandas że chcemy aby do naszej funkcji był przekazywany cały wiersz, za pomocą opcji axis=1. Zobaczmy:

def rozdziel(wiersz):
    wiersz['Imie'], wiersz['nazwisko'] = wiersz['Osoba'].split(' ')
    return wiersz

df = df.apply(rozdziel, axis=1)

Wynik jest następujący:

Podsumowując

Powyżej zobaczyliśmy bardzo proste zastosowanie funkcji apply. W jednym przykładnie wykonaliśmy wskazaną funkcję, dla każdej wartości ze wskazanej kolumny. W drugim przykładnie wykonaliśmy wskazaną funkcję, dla całego wiersza. Możliwości jakie daje funkcja apply są wręcz nieograniczone. Pozwala nam na dowolne transformacje wartości naszego DataFrame i przyjdzie nam z pomocą nie jeden raz.

Zanim przejdziemy dalej, zapraszam do wykonania kilku prostych ćwiczeń.

Ćwiczenia

  1. Przy użyciu funkcji apply utworzyć nową kolumnę, z wartością 1, tam gdzie wynik jest powyżej 20 punktów i wartością 0, tam gdzie wynik jest 20 punktów lub mniej
  2. Za pomocą funkcji apply, utworzyć kolumnę o formacie 'Nazwisko Imię’. Czyli na odwrót niż jest to w naszym DataFrame.

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