Wykorzystanie iterrows() do przeglądania DataFrame za pomocą pętli for

11.2022 | Pandas DataFrame | iterrows() | Przeglądanie rekordów DataFrame

Wykorzystanie funkcji iterrows() pozwala na implementację klasycznej pętli for do przeglądania kolejnych rekordów w zbiorze DataFrame. Iterrows() zwraca kolejne rekordy w postaci par (index, Series). Niniejszy post pokazuje przykłady wykorzystania iterows() m.in. w kontekście generowania wykresów typu scatter plot.

Wykorzystanie funkcji iterrows() pozwala na implementację klasycznej pętli for do przeglądania kolejnych rekordów w zbiorze DataFrame. Iterrows() zwraca kolejne rekordy w postaci par (index, Series). Niniejszy post pokazuje przykłady wykorzystania iterrows() m.in. w kontekście generowania wykresów typu scatter plot.

Przykład 1. Wykorzystanie iterrows() w analizie zbioru Titanic

Celem pierwszego przykładu jest przeglądniecie kolejnych rekordów zbioru Titanic, a następnie stworzenie słownika, zawierającego:

  • Id rekordu

Tablicę wartości, zawierającą płeć, wiek, fakt przeżycia/śmierci

Uwaga: jest to przykład edukacyjny, który może być rozwiązany również na inne sposoby i w którym nie wchodzimy w sensowność tworzenia takiego słownika.

Załadowanie zestawu danych odbywa się poprzez:

df = sns.load_dataset('titanic')

Rekordy dopisujemy do zainicjowanego (pustego) słownika:

cherbourg = {}

Wykorzystujemy iterrows() do przeglądania kolejnych rekordów:

for n, row in df.iterrows():

if row['embark_town'] == 'Cherbourg':

cherbourg[n] = [row['sex'], row['age'], row['alive']]

Jako wynik otrzymujemy tablicę cherbourg, której kolejne rekordy mają postać:

(1, ['female', 38.0, 'yes'])

(9, ['female', 14.0, 'yes'])

(19, ['female', nan, 'yes'])

(26, ['male', nan, 'no'])

(30, ['male', 40.0, 'no'])

Przykład 2. Wykorzystanie iterrows() w wykresach scatter plot do oznaczenia kolorystycznego wybranych rekordów

W analizie wykorzystujemy zbiór danych o filmach z platformy Netflix. Naszym celem jest wykorzystanie iterrows() do "pokolorowania" wybranych rekordów na wykresie Scatter Plot.

Zbiór danych jest dostępny tutaj:

Rozpoczynamy od wczytania zestawu danych do DataFrame df_netflix:

df_netflix = pd.read_csv

W naszej analizie będziemy potrzebować pola duration, które opisuje czas trwania danego filmu. Niestety pole zawiera cyfry i oznaczenie literowe np. Min. Dlatego też wymaga oczyszczenia i usunięcia znaków innych niż cyfry.

W tym celu definujemy funkcję usuwającą inne znaki niż cyfry:

def removeLetters(input):

return re.sub(r'[^0-9]', '', str(input))

Aplikujemy funkcję na kolejne rekordy DataFrame:

df_netflix['duration'] = df_netflix['duration'].apply(removeLetters)

Dodatkowo do dalszej analizy wybieramy tylko te rekordy, które dotyczą typu Movie, gdyż typ TV Shows, w polu duration, nie zawiera czasu trwania filmu, ale liczbę sezonów.

df_netflix_movie = df_netflix[df_netflix.type == 'Movie']

Jako wynik otrzymujemy nowy DataFrame => df_netflix_movie, który wykorzystujemy w wizualizacjach.

Pierwsza wizualizacja

Pierwsza wizualizacja to scatter plot, który pokazuje zależność długości filmu od daty jego wydania.

plt.scatter(df_netflix_movie.release_year,df_netflix_movie.duration)

Druga wizualizacja

W drugiej wizualizacji, chcemy pokazać innym kolorem filmy, które mają kategorie PG, czyli dostępne dla całej rodziny (brak przemocy, nagości etc.).

W tym celu budujemy listę colors, a do jej budowy wykorzystujemy iterrows():

# Definiujemy listę colors

colors = []

# iterujemy po zbiorze df_netflix

for lab, row in df_netflix_movie.iterrows():

if row['rating'] == 'PG':

colors.append("red")

else:

colors.append('black')

Generujemy wykres scatter plot:

plt.scatter(df_netflix_movie.release_year,df_netflix_movie.duration,c=colors)

Czerwona kropka obrazuje nam filmy w kategorii PG. Swoją drogą widać, że jest ich stosunkowo niewiele.

Trzecia wizualizacja

W trzeciej wizualizacji, wyodrębniamy kolorem, rekordy - filmy - stworzone lub współtworzone przez US. W tym celu wykorzystujemy iterrows() do zdefiniowania tablicy z kolorami, zależnymi od producenta filmu.

# definiujemy pustą listę colors

colors = []

# iterujemy po kolejnych rekordach zbioru danych

# jednocześnie oznaczamy rekordy, które zawierają "United States"

for lab, row in df_netflix_movie.iterrows():

if row['country'].find('United States'):

colors.append("orange")

else:

colors.append('black')

Generujemy wykres scatter plot:

plt.scatter(df_netflix_movie.release_year,df_netflix_movie.duration,c=colors)

Pełny kod dla powyższych przykładów znajduje się tutaj: