Skip to content

Commit 8b9c49e

Browse files
committed
Kody statu misto nazvu jako indexy dataframe
1 parent b884fb8 commit 8b9c49e

File tree

1 file changed

+41
-43
lines changed

1 file changed

+41
-43
lines changed

bonusy/bonusove-pandas/indexy.md

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
V této části si zkusíme napas nějaké základní dotazy na naše data. `pandas` umožňují napsat dotazy podobně jako jazyk SQL, k práci ale jeho znalost vůbec ne potřebujeme.
1+
V této části si zkusíme napsat nějaké základní dotazy na naše data. `pandas` umožňují napsat dotazy podobně jako jazyk SQL, k práci ale jeho znalost vůbec ne potřebujeme.
22

33
Tentokrát si vyzkoušíme načíst 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](https://restcountries.com/). Data si můžeš [stáhnout zde](assets/staty.json). Opět platí, že si je musíš stáhnout do adresáře, kde máš právě otevřený terminál!
44

55
## Indexy
66

7-
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íme, že každý stát na světě má svůj název a ten název je **unikátní** a **identifikuje ho**. Můžeme tedy tento název použít jako **index**.
7+
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**.
88

99
**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í.
1010

@@ -15,7 +15,7 @@ To, jaký sloupec má být použit jako index, řeší funkce `set_index()`. Ta
1515
```py
1616
import pandas
1717
staty = pandas.read_json("staty.json")
18-
staty.set_index("name", inplace=True)
18+
staty.set_index("alpha2Code", inplace=True)
1919
```
2020

2121
Úspěch našeho počínání si můžeme zkontrolovat pomocí příkazu `staty.index`, který nám zobrazí informace o indexu.
@@ -25,13 +25,10 @@ print(staty.index)
2525
```
2626

2727
```shell
28-
Index(['Afghanistan', 'Åland Islands', 'Albania', 'Algeria', 'American Samoa',
29-
'Andorra', 'Angola', 'Anguilla', 'Antarctica', 'Antigua and Barbuda',
28+
Index(['AF', 'AX', 'AL', 'DZ', 'AS', 'AD', 'AO', 'AI', 'AQ', 'AG',
3029
...
31-
'Uruguay', 'Uzbekistan', 'Vanuatu',
32-
'Venezuela (Bolivarian Republic of)', 'Viet Nam', 'Wallis and Futuna',
33-
'Western Sahara', 'Yemen', 'Zambia', 'Zimbabwe'],
34-
dtype='object', name='name', length=250)
30+
'UY', 'UZ', 'VU', 'VE', 'VN', 'WF', 'EH', 'YE', 'ZM', 'ZW'],
31+
dtype='object', name='alpha2Code', length=250)
3532
```
3633

3734
Podívejme se nejprve, jaké informace jsou v naší tabulce obsažené.
@@ -42,11 +39,11 @@ staty.info()
4239

4340
```shell
4441
<class 'pandas.core.frame.DataFrame'>
45-
Index: 250 entries, Afghanistan to Zimbabwe
42+
Index: 250 entries, AF to ZW
4643
Data columns (total 8 columns):
4744
# Column Non-Null Count Dtype
4845
--- ------ -------------- -----
49-
0 alpha2Code 250 non-null object
46+
0 name 250 non-null object
5047
1 alpha3Code 250 non-null object
5148
2 capital 250 non-null object
5249
3 region 250 non-null object
@@ -62,81 +59,82 @@ memory usage: 17.6+ KB
6259

6360
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.
6461

65-
K nalezení řádku pomocí indexu použijeme `loc`, která funguje obdobně jako funkce `iloc`. Oproti však primárně používá námi zvolené indexy, zatímco funkce `iloc` pracuje s čísly řádků. Opět platí, že používáme hranaté závorky, protože `loc` není běžná funkce.
62+
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.
6663

6764
```py
68-
print(staty.loc["Czech Republic"])
65+
print(staty.loc["CZ"])
6966
```
7067

7168
```shell
72-
alpha2Code CZ
69+
name Czech Republic
7370
alpha3Code CZE
7471
capital Prague
7572
region Europe
7673
subregion Eastern Europe
7774
population 10558524
78-
area 78865
79-
gini 26
80-
Name: Czech Republic, dtype: object
75+
area 78865.0
76+
gini 26.0
77+
Name: CZ, dtype: object
8178
```
8279

83-
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. Funkci `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`.
80+
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`.
8481

8582
```py
86-
rozloha = staty.loc["Czech Republic","area"]
83+
rozloha = staty.loc["CZ", "area"]
8784
```
8885

8986
### Výběr několika řádků
9087

91-
Funkce `loc()` si podobně jako `iloc()` dobře rozumí s dvojtečkou. Náš soubor je seřazený dle abecedy. 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.
88+
`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.
9289

9390
```py
94-
print(staty.loc["Czech Republic":"Dominican Republic"])
91+
print(staty.loc["CZ":"DO"])
9592
```
9693

9794
```shell
98-
alpha2Code alpha3Code capital region subregion population area gini
99-
name
100-
Czech Republic CZ CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
101-
Denmark DK DNK Copenhagen Europe Northern Europe 5717014 43094.0 24.0
102-
Djibouti DJ DJI Djibouti Africa Eastern Africa 900000 23200.0 40.0
103-
Dominica DM DMA Roseau Americas Caribbean 71293 751.0 NaN
104-
Dominican Republic DO DOM Santo Domingo Americas Caribbean 10075045 48671.0 47.2
95+
name alpha3Code capital region subregion population area gini
96+
alpha2Code
97+
CZ Czech Republic CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
98+
DK Denmark DNK Copenhagen Europe Northern Europe 5717014 43094.0 24.0
99+
DJ Djibouti DJI Djibouti Africa Eastern Africa 900000 23200.0 40.0
100+
DM Dominica DMA Roseau Americas Caribbean 71293 751.0 NaN
101+
DO Dominican Republic DOM Santo Domingo Americas Caribbean 10075045 48671.0 47.2
102+
105103
```
106104

107-
Podobně se funkce chová, 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.
105+
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.
108106

109107
```py
110-
print(staty.loc[:"Andorra"])
111-
print(staty.loc["Uzbekistan":])
108+
print(staty.loc[:"AD"])
109+
print(staty.loc["UZ":])
112110
```
113111

114112
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`.
115113

116114
```py
117-
print(staty.loc[["Czech Republic","Slovakia"]])
115+
print(staty.loc[["CZ", "SK"]])
118116
```
119117

120118
```shell
121-
alpha2Code alpha3Code capital region subregion population area gini
122-
name
123-
Czech Republic CZ CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
124-
Slovakia SK SVK Bratislava Europe Eastern Europe 5426252 49037.0 26.0
119+
name alpha3Code capital region subregion population area gini
120+
alpha2Code
121+
CZ Czech Republic CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
122+
SK Slovakia SVK Bratislava Europe Eastern Europe 5426252 49037.0 26.0
125123
```
126124

127125
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.
128126

129127
```py
130-
print(staty.loc[["Slovakia","Poland","Germany","Austria"], ["area","population"]])
128+
print(staty.loc[["SK", "PL", "DE", "AT"], ["area", "population"]])
131129
```
132130

133131
```shell
134-
area population
135-
name
136-
Slovakia 49037.0 5426252
137-
Poland 312679.0 38437239
138-
Germany 357114.0 81770900
139-
Austria 83871.0 8725931
132+
area population
133+
alpha2Code
134+
SK 49037.0 5426252
135+
PL 312679.0 38437239
136+
DE 357114.0 81770900
137+
AT 83871.0 8725931
140138
```
141139

142140
## Cvičení

0 commit comments

Comments
 (0)