You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: bonusy/bonusove-pandas/indexy.md
+41-43Lines changed: 41 additions & 43 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff 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.
2
2
3
3
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!
4
4
5
5
## Indexy
6
6
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**.
8
8
9
9
**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í.
10
10
@@ -15,7 +15,7 @@ To, jaký sloupec má být použit jako index, řeší funkce `set_index()`. Ta
15
15
```py
16
16
import pandas
17
17
staty = pandas.read_json("staty.json")
18
-
staty.set_index("name", inplace=True)
18
+
staty.set_index("alpha2Code", inplace=True)
19
19
```
20
20
21
21
Úspěch našeho počínání si můžeme zkontrolovat pomocí příkazu `staty.index`, který nám zobrazí informace o indexu.
Podívejme se nejprve, jaké informace jsou v naší tabulce obsažené.
@@ -42,11 +39,11 @@ staty.info()
42
39
43
40
```shell
44
41
<class 'pandas.core.frame.DataFrame'>
45
-
Index: 250 entries, Afghanistan to Zimbabwe
42
+
Index: 250 entries, AF to ZW
46
43
Data columns (total 8 columns):
47
44
# Column Non-Null Count Dtype
48
45
--- ------ -------------- -----
49
-
0 alpha2Code 250 non-null object
46
+
0 name 250 non-null object
50
47
1 alpha3Code 250 non-null object
51
48
2 capital 250 non-null object
52
49
3 region 250 non-null object
@@ -62,81 +59,82 @@ memory usage: 17.6+ KB
62
59
63
60
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.
64
61
65
-
K nalezení řádku pomocí indexu použijeme `loc`, která funguje obdobně jako funkce `iloc`. Oproti ní 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.
66
63
67
64
```py
68
-
print(staty.loc["Czech Republic"])
65
+
print(staty.loc["CZ"])
69
66
```
70
67
71
68
```shell
72
-
alpha2Code CZ
69
+
nameCzech Republic
73
70
alpha3Code CZE
74
71
capital Prague
75
72
region Europe
76
73
subregion Eastern Europe
77
74
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
81
78
```
82
79
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`.
84
81
85
82
```py
86
-
rozloha = staty.loc["Czech Republic","area"]
83
+
rozloha = staty.loc["CZ", "area"]
87
84
```
88
85
89
86
### Výběr několika řádků
90
87
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.
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
+
105
103
```
106
104
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.
108
106
109
107
```py
110
-
print(staty.loc[:"Andorra"])
111
-
print(staty.loc["Uzbekistan":])
108
+
print(staty.loc[:"AD"])
109
+
print(staty.loc["UZ":])
112
110
```
113
111
114
112
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`.
115
113
116
114
```py
117
-
print(staty.loc[["Czech Republic","Slovakia"]])
115
+
print(staty.loc[["CZ", "SK"]])
118
116
```
119
117
120
118
```shell
121
-
alpha2Code alpha3Code capital region subregion population area gini
122
-
name
123
-
Czech RepublicCZ CZE Prague Europe Eastern Europe 10558524 78865.0 26.0
124
-
SlovakiaSK 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
125
123
```
126
124
127
125
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.
0 commit comments