Biblioteka pandas
Typ danych DataFrame
Data Frame to tabelaryczna struktura danych składająca się z kolumn i wierszy, gdzie kolumny mają swoje nazwy a wiersze są indeksowane wartościami.
Tworzenie obiektu DataFrame
Wypełnianie danymi statycznymi
Pierwszą metodą jest użycie słowników:
myDict = {'weekday': ['Mon', 'Tue', 'Wend'],
'city': ['Warsaw', 'Paris', 'Vien'],
'visitors': [120, 12, 100]}
df = pd.DataFrame(myDict)
Inny sposób to wykorzystanie list:
weekdays = ['Mon', 'Tue', 'Wend']
cities = ['Warsaw', 'Paris', 'Vien']
visitors = [120, 12, 100]
labels = ['weekday', 'city', 'visitors']
list_cols = [weekdays, cities, visitors]
zipped = list(zip(labels, list_cols))
data = dict(zipped)
df = pd.DataFrame(data)
Funkcja _zip _tworzy iterator na który składają się krotki reprezentujące kolejne elementy występujące na tym samym indeksie w listach przekazanych jako parametry.
Broadcasting
Broadcasting jest metodą rozszerzenia obiektu DataFrame poprzez przypisanie wartości do nieistniejącej kolumny. W takiej sytuacji tworzona jest dodatkowa kolumna, która zostaje wypełniona zadaną wartością:
df['new_col'] = 0
Zmiana wartości nazw kolumn i wartości indeksów
Przypisanie do atrybutu _columns _zmienia nazwy kolumn:
df.columns = ['A', 'B', 'C', 'D']
Przypisanie do atrybutu _index _zmienia wartości indeksów:
df.index = ['a', 'b', 'c', 'd', 'e', 'f']
Kolumna zawierająca indeks może być nazwana:
df.index.name = "index"
Podstawowe metody i atrybuty pozwalające na zapoznanie się z konkretnym obiektem
Sprawdzenie nazw kolumn w obiekcie
df.columns
Badanie rozmiaru obiektu
df.shape
Zwraca wymiary macierzy.
Badanie typów danych w obiekcie
df.dtypes
Zwraca obiekt "dtype", który opisuje typ danych dla każdej kolumny w obiekcie DataFrame. Typ danych jest wyliczany na podstawie danych w danej kolumnie.
Badanie statystyk na wartościach
Metoda _describe _pozwala na szybkie policzenie statystyk na wartościach numerycznych w poszczególnych kolumnach, np.: średniej, mediany, wartości mininalnej, maksymalnej, itp.
df.describe()
Wywołanie metody na stringach pozwala na sprawdzenie liczby wartości niepustych, liczby wartości unikalnych, najczęściej występującej wartości oraz częstości jej występowania. Może to pomóc w odszukaniu cech, które mogą być skategoryzowane.
Sprawdzanie unikalnych wartości na kolumnie znakowej
df.species.unique()
Sprawdzanie zajętości obiektu DataFrame
Aby zobaczyć podsumowanie informacji o obiekcie DataFrame można wykonać polecenie:
df.info()
Zostanie zwrócona informacja o kolumnach i ich typach, liczbie niepustych wartości w kolumnach, jak również wielkości jaką obiekt zajmuje w pamięci.
Sposoby dostępu do danych
Dostęp do zakresu danych
Dostęp do pierwszych pięciu wierszy i wszystkich kolumn:
df.iloc[:5,:]
Dostęp do ostatnich pięciu wierszy i wszystkich kolumn:
df.iloc[-5:,:]
Dostęp do pierwszych n wierszy:
df.head(n)
Dostęp do n ostatnich wierszy:
df.tail(n)
Indeksowanie po kolumnie typu Date
Obiekt DataFrame pozwala na zdefiniowanie jednej kolumny jako kolumny indeksowej, a następnie na wykorzystanie wartości tej kolumny do pobierania danych z obiektu. W przypadku, jeśli tą kolumną jest kolumna typu Date możliwe są do wykorzystania różne ciekawe właściwości, np.:
Pobranie danych wskazanej kolumny dla wskazanej daty i godziny:
df.loc['2015-01-12 12:32','Company']
Pobranie zakresu danych wynikających z podanego roku i miesiąca:
df.loc['2015-01-12']
Pobranie zakresu danych pasujących do wprowadzonego zakresu dat:
df.loc['2015-01-12':'2015-01-13']
Reindeksowanie kolumny indeksowej
Za pomocą metody _reindex _możliwe jest reindeksowanie istniejącej kolumny indeksowej, np.: poprzez dodanie nowych wartości indeksów:
df.reindex(new_index_values)
Wówczas wiersze ze starym indeksem pasującym do nowego są pozostawiane, a wartości kolumn obiektu dla nowych indeksów są wypełniane wartościami pustymi. Można to zmienić używając atrybutu _method _przyjmującego wartości "ffill" lub "bfill". Pierwszy powoduje, że puste kolumny dla nowych indeksów są wypełniane wartościami kolumn niepustych dla ostatniego napotkanego indeksu. W przypadku "bfill" te puste kolumny są wypełniane wartościami kolumn niepustych pierwszego niepustego indeksu napotkanego po indeksie pustym.
Dostęp do wskazanej kolumny w obiekcie
Dostęp do kolumny w obiekcie DataFrame jest możliwy za pomocą jednego z dwóch sposobów. Zwracany jest wówczas obiekt: Series
column = df['column_name']
column = df.column_name
Konwersja typów kolumn w obiekcie DataFrame
Aby skonwertować daną kolumnę na typ prosty trzeba wykonać metodę:
df['column name'] = df['column name'].astype(str)
gdzie "str" oznacza nazwę typu danych.
Aby skonwertować daną kolumnę na kategorię trzeba wykonać metodę:
df['column name'] = df['column name'].astype('category')
Uwaga!!! Konwersja kolumny na kategorię zmniejsza ilość miejsca potrzebnego na przechowanie całego obiektu DataFrame
Aby skonwertować daną kolumnę na wartość numeryczną trzeba wykonać metodę:
df['column name'] = pd.to_numeric(df['column name'], errors='coerce')
Parametr "errors" ustawiony na wartość "coerce" spowoduje automatyczną zamianę wszystkich wartości, które nie mogą zostać skonwertowane na NaN.
Wywoływanie funkcji na wierszu lub kolumnie w obiekcie DataFrame
Na obiekcie DataFrame można wywołać metodę apply. Pozwala ona na przekazanie nazwy funkcji, która będzie wywołana na wierszu lub kolumnie obiektu DataFrame.
Aby wywołać funkcję na wierszu:
df_subset = df.apply(<nazwa funkcji>, axis = 1, <dodatkowe parametry do przekazanej jako argument funkcji>)
Aby wywołać funkcję na wszystkich kolumnach:
df_subset = df.apply(<nazwa funkcji>, axis = 0, <dodatkowe parametry do przekazanej jako argument funkcji>)
Aby wywołać funkcję na wskazanej kolumnie:
df_subset = df.<nazwa kolumny>.apply(<nazwa funkcji>, <dodatkowe parametry do przekazanej jako argument funkcji>)
Usuwanie danych zduplikowanych
Dane zduplikowane można usunąć korzystając z metody drop_duplicates.
df = df.drop_duplicates()
Usuwanie wierszy zawierających puste wartości
Wiersze, które zawierają puste wartości można usunąć korzystając z metody dropna:
df = df.dropna()
Wypełnienie wartościami danych z wartościami pustymi
Wartości puste można wypełnić zadanymi wartościami korzystając z metody fillna.
Może to być wartość wskazana przez użytkownika:
df['sex'] = ds['sex'].fillna('missing')
Albo może to być wartość wynikająca ze statystyki wartości niepustych w tej kolumnie, np.:
mean_value = df['tip'].mean()
df['tip'] = df['tip'].fillna(mean_value)
Sprawdzanie wartości w kolumnach
Metoda all zwraca wartość True, jeśli wszystkie wartości działania na wartościach kolumn mają wartość True.
Poniższy kod sprawdza czy wszystkie kolumny mają wartość niepustą
pd.notnull(ebola).notnull().all()
Jeśli napiszemy:
pd.notnull(ebola).notnull().all().all()
Dostaniemy pojedynczą wartość informującą o całościowym wyniku sprawdzenia.
Funkcje manipulujące na danych
"Zwijanie" wartości z wielu kolumn do jednej
Czasami, osobne obserwacje tego samego rodzaju są zapisywane w wielu kolumnach danej struktury danych. Przykład, to liczba urodzin w kolejnych latach, gdzie kolumny to kolejne lata. Funkcja _melt _pozwala na zamianę wartości we wskazanych kolumnach na wartości w jednej kolumnie, gdzie kolejna kolumna to nazwa poszczególnej kolumny.
gapminder_melt = pd.melt(gapminder, id_vars=['Life expectancy'])
W parametrze _id_vars _podaje się listę kolumn, które mają zostać niezmienione.