09.2022 | Pandas | Index | DataFrame
Indeks jest nieodłącznym elementem każdej ramki danych (dataframe). Dobre, przemyślane indeksowanie pozwala uzyskać efektywniejszy dostęp do danych tzn. szybszy i czytelniejszy.
Pakiet pandas pozwala na szybkie wprowadzenie dowolnej kolumny jako indeks, co więcej pozwala na wprowadzenie multi-indeksów, gdzie dwie lub więcej kolumn pełni rolę indeksu.
W naszych analizach będziemy wykorzystywać zbiór danych titanic.csv - jest to lista pasażerów słynnego statku Titanic wraz z ich charakterystyką.
Zbiór titanic.csv jest preinstalowany wraz z pakietem seaborn:
import seaborn as sns
df = sns.load_dataset('titanic')
Każdy dataframe ma dwie właściwości:
df.index
--> wyświetla charakterystykę indexu np. numer początkowy, numer ostatniego rekordu i przeskok pomiędzy kolejnymi rekordami RangeIndex(start=0, stop=891, step=1)
df.columns
--> wyświetla listę kolumn wykorzystywanych w danym dataframeUstawienie dowolnej kolumny jako index uzyskujemy, wywołując metodę:
dataframe.set_index('nazwa_kolumny')
df.set_index('age')
=> kolumna age zostanie ustawiona jako indexWykorzystujemy metodę df.reset_index()
aby przywrócić ustawienie domyślne.
df.reset_index()
Ponownie zostaje ustawiony index numeryczny: RangeIndex(start=0, stop=891, step=1)
. Tym samym index/kolumna 'age' wraca do listy kolumn.
Alternatywnie możemy użyć metody reset_index(drop=True)
, gdzie argument drop=True
, powoduje, że kolumna odrzucona jako indeks (zresetowana), zostaje również wyrzucona z ramki danych (dataframe). A zatem nie wraca już ponownie do dataframe - zostaje skasowana.
df.reset_index(drop=True)
Ustawienie kolumny jako index, pozwala na szybsze wykonywanie wybranych operacji, związanych z selekcją danych.
Na przykład: załóżmy, że jako index mamy ustawiona kolumnę 'class'.
Aby pobrać wszystkich pasażerów z trzeciej klasy, wystarczy podać krótką linijkę kodu z wykorzystaniem metody loc
:
df_ind.loc['Third']
A gdy zechcemy pobrać pasażerów z pierwszej i drugiej klasy, to:
df_ind.loc[['First', 'Second']]
W ramach danej ramki, możemy ustawić więcej niż jeden indeks np. w naszym przypadku ustawimy dwie kolumny - 'class' oraz 'who' - jako indeks.
df = df.set_index(['class', 'who'])
Nastepnie wykonujemy sortowanie, kolejno wg 'who' (porządek malejący Z->A) i następnie wg 'class' (porządek rosnący A->Z):
df.sort_index(level=['who','class'], ascending=[False,True])
Pełny kod znajduje się w poniższym notebooku.
Napisz do mnie poprzez formularz kontaktowy.