Jeśli sądzisz, że wykształcenie drogo kosztuje, spróbuj niewiedzy.
Benjamin Franklin
Series
to jednowymiarowa tablica przeznaczona do przechowywania danych.
Składa się ona z danych, oraz odnośników do nich, zwanych powszechnie
index
'ami. Pisząc dane mam na myśli wszystkie standardowe typy występujące w
języku Python
jak liczby stałe, listy, tuple, obiekty, itd.
employee_fields = ["Name", "Surename", "ID", "Salary"]
employee_data = ["Krzysztof", "Kowalski", "123456", 5000]
employee_series = pd.Series(index = employee_fields,
data = employee_data)
print(employee_series)
Name Krzysztof
Surename Kowalski
ID 123456
Salary 5000
dtype: object
Taki sam efekt uzyskamy tworząc obiekt bezpośrednio ze słownika
employee_dict = { "Name": "Krzysztof",
"Surename": "Kowalski",
"ID": "123456",
"Salary": 5000}
employee_series = pd.Series(employee_dict)
Dostęp do wartości i indeksów uzyskujemy przez własności values
, oraz
index
:
>>> employee_series.values
array(['Krzysztof', 'Kowalski', '123456', 5000], dtype=object)
>>> employee_series.index
Index(['Name', 'Surename', 'ID', 'Salary'], dtype='object')
Będąc w tym punkcie warto sprawdzić jakiego typu jest obiekt zwrócony przez wspomniane własności.
type(employee_series) # <class 'pandas.core.series.Series'>
type(employee_series.index) # <class 'pandas.core.indexes.base.Index'>
type(employee_series.values)# <class 'numpy.ndarray'>
Dostęp do elementów utworzone obiektu mamy poprzez numeryczne indeksy:
>>> employee_series[0]
'Krzysztof'
>>> employee_series[0:2]
Name Krzysztof
Surename Kowalski
dtype: object
Lub też podając nazwy indeksów do których chcemy uzyskać dostęp:
>>> employee_series[["Name", "Surename"]]
Name Krzysztof
Surename Kowalski
dtype: object
Podstawową strukturą danych pakietu pandas
jest Series
. Jest to
jednowymiarowa tablica z indeksowanymi elementami. Przykład użycia tworzący
Series
z listy elementów: s = Series( [1, 2, 4, 5, 5] )
i dający im
domyślne, numeryczne, indeksy. Wartości indeksów możemy nadawać samodzielnie s
= Series( [1, 2, 4, 5, 5], index =['a', 'b', 'c', 'd', 'e'] )
. Wyświetlając na
ekranie utworzony obiekt zobaczymy, że oprócz elementów wyświetlone zostaną
również przyporządkowane im indeksy.
Dostęp do elementów realizowany jest przez podanie interesujących nas indeksów.
Na przykład s[ [1, 2] )
by uzyskać dostęp do elementu z indeksem 1, oraz 2.
Ciekawostką jest, że w przypadku nadania nie numerycznych indeksów elementom
tabeli w dalszym ciągu będziemy w stanie uzyskać do nich dostęp podając ich
numeryczną pozycję.
Dostęp do samych wartości indeksów realizowany jest przez s.index
i wraca
obiekt Index
zawierający nazwy wszystkich użytych etykiet.
Często jako etykiet używa się dat. Istnieje specjalna klasa DatetimeIndex
stanowiąca indeks zoptymalizowany do przechowywania dat i czasów. Przykładowo
by stworzyć etykiety prezentujące serię dat pomiędzy określonymi i włączonymi
do serii punktami w czasie możemy wykonać kod: dates_label =
pd.date_range('2020-03-01', '2020-03-31')
. Sam w sobie indeks jest mało
użyteczny, jednak możemy go wykorzystać do indeksowania elementów w Series
.
Obiekt Series
to nazwany szereg danych. Nazwę nadajemy przez przypisanie do
atrybutu .name
wartości.
series[1]
mask=[1, 3, 5 ]
, a
następnie przekazanie jej do serii series[mask]
.
Uzyskamy dostęp do wybranych indeksów,mask=[True, False, True,
False, True]
, a następnie przekazanie jej do serii series[mask]
. Uzyskamy
dostęp do elementów na pozycjach True,Przekształcanie danych, ang. data wrangling to jedna z podstawowych operacji
w czasie analizy danych. Przykładowe operacje, które mogą być pomocne od samego
początku przygody z Pandas
s1.isin(s2)
zwraca Series
z maską boolowską dla stanowiącą porównanie
elementów, s1.map(lambda x: ...)
zastosuj funkcję lambda na wszystkich elementachs1.drop(labels=[1, 2])
usuń elementy o indeksach 1 i 2,s1.add(s2)
zwraca obiekt Series
z elementami będącymi sumą elementów na
poszczególnych indeksachs1.append(s2)
łączenie dwóch Series
. Istotne jest to, że połączone
zostaną zarówno dane, jak i przypisane do nich indeksy. Może to być dość
mylące, dlatego też przed wykonaniem operacji warto wywołać funkcję z
parametrem s1.append(s2, ignore_index=True)
s1.count()
zwraca liczbę elementóws1.nunique()
zwraca liczbę unikalnych wartościs1.unique()
zwraca listę z unikalnymi wartościamis1.sort_values()
zwraca obiekt Series
z posortowanymi wartościami.
Przyporządkowane indeksy do elementów dalej pozostaną przypisane do
oryginalnych wartości.s1.sort_values(inplace=True)
sortuje wartości obiektu. Przyporządkowane
indeksy do elementów dalej pozostaną przypisane do oryginalnych wartości.s1.reset_index(drop=True)
resetuje index zaczynając numerację od 0. s1.reset_index()
zwraca DataFrame
z nowym indeksem zaczynającym się od
zera, zaś stary indeks zostanie przypisany do kolumny "Index".s1.astype("float64")
konwertuje dane na żądany typ.