IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Pandas – Základné vlastnosti DataFrames

V minulej lekcii, Pandas - Tvorba vlastného datasetu, sme sa naučili pracovať s knižnicou Pandas a na príkladoch nákupného zoznamu či cvičebného plánu ukázali, ako tvoriť vlastný dataset.

V tomto tutoriále knižnice Pandas v Pythone si priblížime dátový typ- dtype. Nadviažeme tým na minulú lekciu, kde sme sa naučili pracovať s dataframami. Tieto znalosti si teraz rozšírime s použitím funkcie info(). Naučíme sa vyhľadávať v dátach podľa súradníc a bližšie sa pozrieme na prácu s riadkami a stĺpcami.

Vlastnosti Pandas DataFrames()

Pandas DataFrame() je v podstate 2D tabuľka určená osami index a columns. Ďalšou vlastnosťou je dátový typ- dtype. Vráťme sa teraz k nášmu nákupnému zoznamu. Povedzme, že sme dostali obrovskú chuť na rožok s maslom a so šunkou. Preto si do dataframu pripíšeme hodnotu True alebo False, ktorá určí, či danú potravinu nutne potrebujeme. Kód vyzerá takto:

shopping_list = [["roll", 10, "pieces", True],

          ["apple", 8, "pieces", False],

          ["butter", 1, "pieces", True],

          ["ham", 200, "grams", True],

          ["milk", 1, "liters", False],

          ["egg", 15, "pieces", False]
        ]
df = pd.DataFrame(shopping_list, columns =["Type", "Amount", "", "Necessary"])
df.index += 1
print(df)

Teraz na náš dataframe použijeme funkciu info() tak, že nahradíme riadok s funkciou print(df). Pomocou info() si vytiahneme informácie z nášho dataframu:

df.info()

Výstup bude vyzerať takto:

Shopping list info - Pandas - Vizualizácia dát v Pythone

Z tohto výstupu sa môžeme dočítať, že náš index má rozpätie od 1 do 6, čiže obsahuje šesť riadkov. Ďalej tu vidíme, že náš dataframe obsahuje štyri stĺpce. Z výpisu je tiež zrejmé, koľko hodnôt je nenulových (tu všetky). Môžeme si pozrieť aj dátové typy stĺpcov. Keďže Pandas potrebuje, aby každá hodnota zaberala rovnakú pamäť, objavil sa nám tu dátový typ object odkazujúci na string bežných textových hodnôt. Namiesto klasického int máme int64. Číslo za skratkou znamená, koľko bitov zaberá jedna hodnota. Toto je opäť vytvorené kvôli tomu, aby jednotlivé hodnoty zaberali rovnakú pamäť. Pre nás je 64 bitov prehnane veľa. Typ je možné konvertovať na int32, ktorý nadobúda hodnoty medzi -2147483648 a 2147483647. Ak je pre nás aj toto veľa, môžeme využiť int16, ktorý ponúka rozsah medzi -32768 a 32767 alebo aj int8. Ten nadobúda hodnoty od -128 do 127. V neposlednom rade máme aj dátový typ bool, ktorý ukazuje na hodnoty Áno/Nie.

Vyhľadávanie podľa súradníc

Ako už vieme, Pandas DataFrame je v podstate 2D tabuľka. A rovnako ako všetky 2D tabuľky má aj Pandas DataFrame súradnice. Zatiaľ čo v geometrii sú určené osami X a Y av geografii zemepisnou šírkou a dĺžkou, v Pandas DataFrame sú určené osami index a columns. Tieto súradnice môžeme využiť na vyhľadávanie jednotlivých hodnôt. Povedzme, že sme zabudli, aké množstvo šunky sme mali kúpiť. Keďže vieme, že šunka sa nachádza na štvrtom riadku, môžeme jednoducho požadované množstvo šunky vyhľadať. Vieme, že na osi index hľadáme číslo 4 a na osi columns hľadáme hodnotu Amount. K tomu využijeme funkcie df.at[index, column]:

df.at[4, 'Amount']

Vidíme, že množstvo šunky, ktoré máme kúpiť, je 200.

Samozrejme sa môže stať, že ani nevieme, na ktorom riadku šunka je. Žiadny problém: využime funkcie df.loc[df[column] == "value"]. Pre náš prípad bude kód vyzerať takto:

df.loc[df['Type'] == "ham"]

Po spustení zistíme, že šunka sa v našom dataframe nachádza na 4. riadku. A pretože je náš dataframe malý, môžeme si zo zvyšných hodnôt prečítať rovno aj požadované množstvo:

Shopping list locate - Pandas - Vizualizácia dát v Pythone

Základné práce so stĺpcami

Poďme si ďalej rozšíriť obsah nášho nákupného zoznamu. Povedzme, že sa k nám na návštevu chystá známy alergický na laktózu. Preto potrebujeme na nákupnom zozname nejako označiť produkty, ktoré obsahujú mlieko. Jednou z možností je pridať ručne nový stĺpec. To je však pomerne zdĺhavé a pri práci s väčším objemom dát niekedy priam nemožné. Pridať stĺpec navyše však nie je žiadny problém vďaka použitiu funkcie insert(). Konkrétna syntax je df.insert(position, column, [values]). Kód pre pridanie stĺpca do nášho zoznamu teda bude vyzerať takto:

df.insert(1, "Lactose", [False, False, True, False, True, False])

Pri vyberaní pozície nesmieme zabúdať, že sa opäť počíta od nuly. Pokiaľ chceme dať stĺpec na prvú pozíciu, bude v hodnote pozícii uvedená nula. Pokiaľ chceme pridať náš stĺpec na poslednú pozíciu, uvedieme hodnotu -1. My sme zvolili hodnotu 1, čiže sme umiestnili informáciu o obsahu laktózy na druhú pozíciu medzi stĺpcami. Keď si spustíme náš dataframe, uvidíme, že sa tam skutočne nachádza:

Insert lactose - Pandas - Vizualizácia dát v Pythone

Pokiaľ máme pocit, že sme umiestnenie nezvolili úplne najšťastnejšie, nie je problém preskladať poradie stĺpcov. K tomu využijeme funkciu iloc(). Syntax je jednoduchá - df.iloc[od index:do index,[order]]. V našom prípade chceme, aby prítomnosť laktózy bola na prvom mieste. Náš kód teda bude vyzerať takto:

df.iloc[:,[1,0,2,3,4]]

V našom kóde sme umiestnili druhý stĺpec pred prvou. Rozsah indexu od:do nebol pre nás v našom malom dataframe nevyhnutný, preto sme ho nevypĺňali. Tabuľka teraz vyzerá takto:

Dataframe iloc - Pandas - Vizualizácia dát v Pythone

Tu zobrazená tabuľka nie prepísala náš dataframe. Iba sme si vytvorili nový náhľad. Pokiaľ chceme túto tabuľku uložiť ako súčasný dataframe, môžeme tak urobiť jednoducho:

df = df.iloc[:,[1,0,2,3,4]]

Rozmyslíme sa a rozhodneme, že stĺpec s laktózou bol predsa len lepší na druhom mieste. Poďme ho teda vrátiť späť. Stĺpce nemusíme prehadzovať nutne len podľa poradia, môžeme využiť aj ich názvy za použitia funkcie loc(), ktorú sme už predtým použili na vyhľadávanie šunky:

df = df.loc[1:6,["Type", "Lactose", "Amount", "", "Necessary"]]

Kód vyzerá v podstate rovnako, ako pri použití funkcie iloc(), s výnimkou toho, že sme nahradili poradie stĺpcov ich názvy. Čísla indexu od/do sme si vyplnili len na ukážku. Všetkých šesť položiek sa nám opäť uložilo do dataframu.

Tu si tiež môžeme všimnúť, akú potenciálnu neplechu môže vyrobiť stĺpec, ktorý sme si nijako nepomenovali. Poďme to teda opraviť pomocou funkcie rename(). Funkciu použijeme so syntaxou df.rename(columns={"old name": "new name"}). V našom prípade teda:

df = df.rename(columns={"": "Of what"})

Každý stĺpec je teraz popísaný:

{Dataframe rename} - Pandas - Vizualizácia dát v Pythone

Potom, čo náš známy odišiel, je nám už informácia týkajúca sa laktózy k ničomu. Môžeme teda náš stĺpec odstrániť. To môžeme urobiť opäť pomocou loc(). Konkrétne tak, že jednoducho medzi stĺpcami nezmienime stĺpec "Laktoza". Lepšie riešenie je ale pomocou funkcie drop() stĺpec zmazať takto: df.drop('column', axis=1). Axis, čiže slovensky os, nadobúda hodnoty 0 pre riadky alebo ako v našom prípade 1 pre stĺpce.

df = df.drop('Lactose', axis=1)

A voilà, stĺpec "Lactose" je preč :-)

Základné práce s riadkami

Keďže už vieme pracovať so stĺpcami, práca s riadkami pre nás nebude znamenať problém. Do nášho nákupného zoznamu pribudli dva kilogramy zemiakov. Tie do nášho dataframu pripíšeme za pomoci našej už dobre známej funkcie loc(), tentoraz v podobe df.loc[order] = [values]. V našom zozname teda do kódu doplníme:

df.loc[len(df.index)+1] = ['potatoes', 2, "kg", False]

Pridali sme teda nie až také nutné zemiaky na posledné miesto medzi riadkami. Kód len(df.index) v našom prípade zastupuje najvyššie číslo v indexe, čiže posledný riadok, ktorý treba navýšiť o 1:

Loc index potatoes - Pandas - Vizualizácia dát v Pythone

Ak sa teraz rozhodneme, že je potrebné mať zemiaky na prvom riadku, môžeme využiť funkciu reindex(). S jej pomocou si môžeme zoradiť riadky podľa ich indexu. V našom prípade teda:

df = df.reindex([7,1,2,3,4,5,6])

Výsledkom je, že zemiaky máme na prvom riadku:

Dataframe reindex - Pandas - Vizualizácia dát v Pythone

Všimnime si, že zemiakom zostalo indexové číslo 7. Ak by sme teraz chceli resetovať indexové čísla, môžeme tak urobiť pomocou funkcie reset_index():

df = df.reset_index(drop=True)

Parameter drop=True zaistí, že aktuálny index bude úplne odstránený a nahradí ho číselný index od nuly.

Ak chceme uchovať číslovanie od jednotky, môžeme tak urobiť zopakovaním inkrementácie indexu df.index += 1. Druhou možnosťou je postarať sa o to pomocou NumPy funkcie arange():

df.index = np.arange(1, len(df) + 1)

Teraz máme náš zoznam upravený. Na prvom mieste sa už nachádzajú zemiaky s indexom 1:

NumPy arange - Pandas - Vizualizácia dát v Pythone

Rovnako, ako pri práci so stĺpcami, môžeme využiť aj funkcie drop(). Na zmazanie napríklad posledných vajec použijeme kód

df = df.drop(7, axis=0)

Jediným rozdielom je, že tentoraz by hodnota axis bola 0 namiesto 1. Zemiaky na našom nákupnom zozname zatiaľ ponechajme.

V budúcej lekcii, Pandas - Podmienené filtrovanie, sa naučíme, akými spôsobmi môžeme v Pandas vykonávať podmienené filtrovanie dát v dataframe.


 

Predchádzajúci článok
Pandas - Tvorba vlastného datasetu
Všetky články v sekcii
Pandas - Vizualizácia dát v Pythone
Preskočiť článok
(neodporúčame)
Pandas - Podmienené filtrovanie
Článok pre vás napísal Michal Souček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Michal
Aktivity