Opět si zde načteme data ze souboru ve formátu JSON. Konkrétně budeme pracovat s daty o státech světa, která jsou stažená ze služby restcountries. Data si můžeš stáhnout zde. Opět platí, že si je musíš stáhnout do adresáře, kde máš právě otevřený terminál!
Indexy
Vytvoř si nový Python skript. Soubor načteme pomocí funkce read_json
, kde jako první parametr zadáme název souboru. Data jsou opět vrácena jako DataFrame
a my si je uložíme do proměnné staty
. U dat o státech světa však můžeme přidat jedno zlepšení. V našem datasetu má každý stát svůj kód, který je unikátní a identifikuje ho. Můžeme tedy tento kód použít jako index.
K zamyšlení: Jaký index bychom použili pro tabulku zaměstnanců ve firmě, tabulku obcí České republice a tabulku aut v autopůjčovně? Pamatuj, že index by měl být unikátní.
Přidání indexu
To, jaký sloupec má být použit jako index, řeší funkce set_index()
. Ta nám vrátí upravený DataFrame
, který si můžeme uložit do původní proměnné staty
.
import pandas
staty = pandas.read_json("staty.json")
staty = staty.set_index("alpha2Code")
Úspěch našeho počínání si můžeme zkontrolovat pomocí příkazu staty.index
, který nám zobrazí informace o indexu.
print(staty.index)
Index(['AF', 'AX', 'AL', 'DZ', 'AS', 'AD', 'AO', 'AI', 'AQ', 'AG',
...
'UY', 'UZ', 'VU', 'VE', 'VN', 'WF', 'EH', 'YE', 'ZM', 'ZW'],
dtype='object', name='alpha2Code', length=250)
Podívejme se nejprve, jaké informace jsou v naší tabulce obsažené.
staty.info()
<class 'pandas.core.frame.DataFrame'>
Index: 250 entries, AF to ZW
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 250 non-null object
1 alpha3Code 250 non-null object
2 capital 250 non-null object
3 region 250 non-null object
4 subregion 250 non-null object
5 population 250 non-null int64
6 area 240 non-null float64
7 gini 153 non-null float64
dtypes: float64(2), int64(1), object(5)
memory usage: 17.6+ KB
Výběr konkrétního řádku a hodnoty
Z názvů sloupců bychom mohli odvodit, jaké informace se v našem DataFrame
nacházejí, ale možná se zorientujeme lépe, když se podíváme na nějaký konkrétní řádek.
K nalezení řádku pomocí indexu použijeme loc
, který funguje obdobně jako iloc
. Oproti němu však primárně používá námi zvolené indexy, zatímco iloc
pracuje s čísly řádků. Opět platí, že používáme hranaté závorky, protože loc
není běžná funkce.
print(staty.loc["CZ"])
name Czech Republic
alpha3Code CZE
capital Prague
region Europe
subregion Eastern Europe
population 10558524
area 78865.0
gini 26.0
Name: CZ, dtype: object
Opět jsme vybrali jeden řádek, získáme tedy výsledek jako sérii. Můžeme však jít ještě dále a získat jednu konkrétní hodnotu. loc
dodáme druhý parametr, který bude obsahovat jméno sloupce, ze kterého chceme hodnotu vybrat. Vyberme si třeba rozlohu, kterou uložíme do proměnné rozloha
.
rozloha = staty.loc["CZ", "area"]
Výběr několika řádků
loc
si podobně jako iloc
dobře rozumí s dvojtečkou. Náš soubor je seřazený dle abecedy podle názvu státu. Pokud tedy chceme vypsat všechny státy, jejich názvy v abecedě patří mezi Českou republikou a Dominikánskou republikou, vložíme tato jméno do uvozovek a dáme mezi ně dvojtečku.
print(staty.loc["CZ":"DO"])
name alpha3Code capital region subregion population area gini
alpha2Code
CZ Czech Republic CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
DK Denmark DNK Copenhagen Europe Northern Europe 5717014 43094.0 24.0
DJ Djibouti DJI Djibouti Africa Eastern Africa 900000 23200.0 40.0
DM Dominica DMA Roseau Americas Caribbean 71293 751.0 NaN
DO Dominican Republic DOM Santo Domingo Americas Caribbean 10075045 48671.0 47.2
Podobně funguje, i když zadáme jen jednu hranici. Můžeme si třeba zkusit vypsat hodnoty od začátku po Andorru nebo od Uzbekistánu do konce.
print(staty.loc[:"AD"])
print(staty.loc["UZ":])
Pokud by nás zajímaly informace o více řádcích, které spolu nesousedí, můžeme opět použít seznam. Index řádků, které nás zajímají, vložíme do seznamu a ten předáme jako první parametr funkci loc
.
print(staty.loc[["CZ", "SK"]])
name alpha3Code capital region subregion population area gini
alpha2Code
CZ Czech Republic CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
SK Slovakia SVK Bratislava Europe Eastern Europe 5426252 49037.0 26.0
Pomocí seznamu se můžeme zeptat i na informace z více sloupců. Zkusme si třeba porovnat rozlohu a počet obyvatel sousedních států České republiky.
print(staty.loc[["SK", "PL", "DE", "AT"], ["area", "population"]])
area population
alpha2Code
SK 49037.0 5426252
PL 312679.0 38437239
DE 357114.0 81770900
AT 83871.0 8725931