Blog Analityczny. Narzędzia. Techniki. Rozwiązania Analityczne.

Przegląd operacji związanych z index w Pandas

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.

Zbiór danych

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')

Charakterystyka ramki - kolumny, index

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 dataframe

Ustawienie dowolnej kolumny jako index

Ustawienie dowolnej kolumny jako index uzyskujemy, wywołując metodę:

  • dataframe.set_index('nazwa_kolumny')
  • Przykład: df.set_index('age') => kolumna age zostanie ustawiona jako index

Reset indexu do wartości pierwotnej

Wykorzystujemy 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.

Reset indeksu wraz z usunięciem kolumny

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)

Przykład wykorzystania kolumny, ustawionej jako index

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']]

Ustawienie wielu index-ów w ramach jednej ramki danych (multilevel index)

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])

Notebook z przykładami

Pełny kod znajduje się w poniższym notebooku.