Kódím.cz
2

Načtení dat

Pojďme načíst data do pandas a podívat se na ně

Základní práce s DataFrame

V Pandas většinou pracujeme s datovou strukturou zvanou DataFrame. Je to tabulková datová struktura a funguje podobně jako tabulka v Excelu nebo v databázi. Můžeme jej považovat za další datový typ vedle slovníků a seznamů. DataFrame obsahuje data ve sloupcích, kde každý sloupec může mít různý datový typ, tedy například číslo, desetinné číslo, řetězec, pravdivostní hodnota a jiné.

Poznámka: Pokud znáš základy objektově orientovaného programování, pak věz, že DataFrame je ve skutečnosti třída a my na jejím základě budeme vytvářet objekty.

Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce s potravinami. Protože data jsou poměrně rozsáhlá, použijeme pouze 100 náhodně vybraných řádků, abychom se v datech snáze orientovali.

Načítání dat

Data si můžete stáhnout v souboru food_sample_100.csv. Důležité je, že si soubor musíš uložit nebo zkopírovat do stejného adresáře, v jakém právě pracuješ ve Visual Studiu! To si ověříš pomocí příkazu dir ve Windows nebo ls v MacOS nebo Linuxu. Tento příkaz ti vypíše obsah aktuální adresáře. V přehledu souborů bys měla vidět soubor food_sample_100.csv.

Abychom tabulku načetli jako DataFrame, vytvoříme si nový Python skript, importujeme modul pandas a načteme CSV soubor pomocí funkce read_csv().

import pandas as pd
food = pd.read_csv('food_sample_100.csv')

Poznámka: Modul pandas nabízí obrovské množství možností. Nemusíš si samozřejmě vše pamatovat, protože vše najdeš přehledně popsáno v dokumentaci. Například funkce read_csv je popsána zde. Dokumentaci k samotnému DataFrame najdeš zde.

Funkce read_csv má spoustu nepovinných parametrů, o kterých si můžeme přečíst v dokumentaci. Například se tam dočteme, že pandas standardně nastavuje jako oddělovač sloupců čárku (parametr sep). Protože my většinou používáme středník, budeme muset tento parametr často nastavit. Náš soubor food_sample_100.csv ale používá čárku, takže nyní nic měnit nemusíš.

Celý DataFrame vypíšeme na obrazovku pomocí funkce print().

Všimni si, že pandas nám přidal nový sloupec s číslem řádku. Jedná se o index, se kterým budeme později pracovat. Index je hodnota, která identifikuje řádek. V některých případech nemusíme jako index používat číslo řádku, ale můžeme jako index vybrat některý ze sloupců. Obdobnou funkci má v databázích primární klíč. Jako best practice se většinou uvádí, že index by měl být unikátní, i když to pandas (na rozdíl od právě databází) nevyžadují. Na druhou stranu, práce s tabulkou, kde index není unikátní, je pomalejší.

My bychom si jako index mohli zvolit sloupec fdc_id. To bychom provedli pomocí metody set_index().

food = food.set_index("fdc_id")

Pandas nabízí kromě funkce read_csv() také funkci pro čtení formátu JSON read_json() nebo dokonce funkci pro čtení přímo Excelových tabulek read_excel().

Základní informace o tabulce

Jakmile máme tabulku načtenou, budeme o ní chtít vědět nějaké úplně základní údaje. K tomu nám pomůže metoda info(), která vrací souhrnné informace o celé tabulce: názvy sloupců, datové typy, počet neprázdných hodnot atd.

food.info()

Výsledek je vidět níže.

<class 'pandas.core.frame.DataFrame'>
Index: 100 entries, 2644829 to 328565
Data columns (total 4 columns):
 #   Column            Non-Null Count  Dtype
---  ------            --------------  -----
 0   data_type         100 non-null    object
 1   description       100 non-null    object
 2   food_category_id  99 non-null     float64
 3   publication_date  100 non-null    object
dtypes: float64(1), object(3)
memory usage: 3.9+ KB

Poznámka: Pokud znáš základy objektově orientovaného programování, pak věz, že info je ve skutečnosti metoda třídy DataFrame.

Počet řádků a sloupců můžeme získat z vlastnosti shape:

print(food.shape)

Výsledek je opět níže.

(100, 4)

pandas nám vrací výsledky v sekvenci, která se jmenuje tuple. Nám stačí vědět, že si z ní data můžeme načíst stejně jako ze seznamu. Na prvním místě je vždy počet řádků a na druhém počet sloupců. Pokud by nás třeba zajímal jen počet řádků, napíšeme:

print(food.shape[0])

Výsledkem je celé číslo (typ hodnoty int).

100

Názvy všech sloupců pak z vlastnosti columns:

print(food.columns)

Níže je výstup příkazu.

Index(['data_type', 'description', 'food_category_id', 'publication_date'], dtype='object')

Začátek a konec

Na prvních a posledních několik řádků se chceme podívat často, hlavně v případě, když moc dobře neznáme strukturu dat. Můžeme k tomu použít metody head a tail.

print(food.head())
               data_type    description  food_category_id publication_date
fdc_id
2644829  sub_sample_food   lentils, dry              16.0       2023-10-19
2347263  sub_sample_food    heavy cream               1.0       2022-10-28
2261954  sub_sample_food  Flour, potato              11.0       2022-04-28
321470   sub_sample_food  Salt, Iodized               2.0       2019-04-01
322951   sub_sample_food  Hot dogs beef               7.0       2019-04-01

Metoda head má parametr n, což je počet řádků, které mají být vypsány. Tento parametr je ale nepovinný. Nepovinné parametry mají vždy nějakou výchozí hodnotu, v případě parametru n metody head je tato výchozí hodnota 5. Můžem ale zvolit libovolnou vlastní, například 20.

Často je užitečné podívat se spíše na konec souboru. Pokud jsou data seřazená podle času, uvidíme na konci souboru nejnovější data, která nás často (např. u kurzu měn nebo akcií) zajímají víc než dávná historie.

print(food.tail())

Metoda tail má také nepovinný parametr n s výchozí hodnotou 5.