11.2022 | Pandas DataFrame | iterrows() | Przeglądanie rekordów DataFrame | Przeczytasz w 3 min.
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.
Celem pierwszego przykładu jest przeglądniecie kolejnych rekordów zbioru Titanic, a następnie stworzenie słownika, zawierającego:
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'])
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 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)
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.
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)
Napisz do mnie poprzez formularz kontaktowy.