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
Jak už víme, v `pandas` má každý řádek přiřazený index. Jako index můžeme zvolit některý ze sloupců. Pokud však tabulku načteme bez toho, abychom specifikovali index, `pandas` nám vytvoří **číselný index** automaticky. Je to něco podobného jako číslování řádků v Excelu.
4
+
5
+
K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` nám umožní ptát se na konkrétní záznam podobně jako u sekvencí, jsou zde přítomné i hranaté závorky. `iloc` tedy ve skutečnosti není funkce, ale kromě jiného typu závorek s ní pracujeme jako s funkcí.
6
+
7
+
Zkusme si zobrazit třeba **čtvrtý** nákup. Číslujeme tradičně od nuly, jistě tě tedy nepřekvapí, že napíšeme `nakupy.iloc[3]`.
8
+
9
+
```py
10
+
print(nakupy.iloc[3])
11
+
```
12
+
13
+
```shell
14
+
jmeno Libor
15
+
datum 2020-03-05
16
+
vec Pivo
17
+
cena 124
18
+
Name: 3, dtype: object
19
+
```
20
+
21
+
Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek jinak orientovaný. Výběr jednoho řádku nám vrátí Sérii stejně jako v případě výběru jediného sloupce. Pohled na tento řádek pak máme orientovaný na výšku.
22
+
23
+
Metoda `iloc[]` umožňuje pro výběr řádků použít rozsah ve formátu `od:do`. K tomu používáme **dvojtečku**. Před dvojtečku píšeme první řádek, který chceme vypsat a za dvojtečku první řádek, který již vy výpisu nebude. Pokud tedy například napíšeme `nakupy.iloc[3:5]`, získáme řádky s indexy 3 a 4, ale už ne řádek s indexem 5.
24
+
25
+
```py
26
+
print(nakupy.iloc[3:5])
27
+
```
28
+
29
+
```shell
30
+
jmeno datum vec cena
31
+
3 Libor 2020-03-05 Pivo 124
32
+
4 Petr 2020-03-18 Pytel na odpadky 75
33
+
```
34
+
35
+
Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojtečku psát 0, stačí napsat `iloc[:3]`.
36
+
37
+
```py
38
+
print(nakupy.iloc[:3])
39
+
```
40
+
41
+
```shell
42
+
jmeno datum vec cena
43
+
0 Petr 2020-02-05 Prací prášek 399
44
+
1 Ondra 2020-02-08 Savo 80
45
+
2 Petr 2020-02-24 Toaletní papír 65
46
+
```
47
+
48
+
Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řádků je 10, chceme vypsat řádky od osmého dále. Nyní se nabízí napsat číslo před dvojtečku. Píšeme tam ale 8, protože řádek, jehož číslo je před dvojtečkou, je vždy součástí výpisu.
49
+
50
+
```py
51
+
print(nakupy.iloc[8:])
52
+
```
53
+
54
+
```shell
55
+
jmeno datum vec cena
56
+
8 Zuzka 2020-06-05 Savo 80
57
+
9 Pavla 2020-06-13 Máslo 50
58
+
10 Ondra 2020-07-25 Káva 300
59
+
```
60
+
61
+
Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme. U seznamů už ale existoval trik použití záporného čísla. Ten můžeš použít i v `pandas`. Pokud napíšeš `iloc[-3:]`, získáš též poslední tři řádky.
62
+
63
+
```py
64
+
print(nakupy.iloc[-3:])
65
+
```
66
+
67
+
```shell
68
+
jmeno datum vec cena
69
+
8 Zuzka 2020-06-05 Savo 80
70
+
9 Pavla 2020-06-13 Máslo 50
71
+
10 Ondra 2020-07-25 Káva 300
72
+
```
73
+
74
+
### Výběr řádků a sloupců podle čísla
75
+
76
+
Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho tabulek obsahuje spoustu různých informací a ne všechny nás musejí zajímat. Čísla sloupců zadáváme jako druhý parametr funkce `iloc`.
77
+
78
+
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
79
+
80
+
```py
81
+
print(nakupy.iloc[:5,0])
82
+
```
83
+
84
+
```shell
85
+
0 Petr
86
+
1 Ondra
87
+
2 Petr
88
+
3 Libor
89
+
4 Petr
90
+
Name: jmeno, dtype: object
91
+
```
92
+
93
+
U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně nemusí být vedle sebe. nás u nákupů asi bude nejvíce zajímat jméno a částka. Abychom dali dohromady dvě čísla, která neleží vedle sebe, můžeme použít seznam. Pro prvních pět nákupů tedy jako druhý parametr napíšeme `[0,3]`.
94
+
95
+
```py
96
+
print(nakupy.iloc[:5,[0,3]])
97
+
```
98
+
99
+
```shell
100
+
jmeno cena
101
+
0 Petr 399
102
+
1 Ondra 80
103
+
2 Petr 65
104
+
3 Libor 124
105
+
4 Petr 75
106
+
```
107
+
108
+
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
Copy file name to clipboardExpand all lines: python-pro-data-1/nacteni-dat/indexy.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,3 @@
1
-
## Základní dotazy
2
-
3
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.
4
2
5
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!
Než s daty začneme pracovat, musíme si je nejprve načíst.
4
-
5
-
### Základní práce s DataFrame
1
+
## Základní práce s DataFrame
6
2
7
3
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é.
8
4
@@ -24,7 +20,7 @@ Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce se sezn
24
20
| Pavla | 2020-06-13 | Máslo | 50 |
25
21
| Ondra | 2020-07-25 | Káva | 300 |
26
22
27
-
####Načítání dat
23
+
### Načítání dat
28
24
29
25
Tabulku výše si můžete stáhnout ve [formátu CSV](assets/nakupy.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 `nakupy.csv`.
30
26
@@ -61,7 +57,7 @@ Všimni si, že `pandas` nám přidal nový sloupec s číslem řádku. Jedná s
61
57
62
58
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()`.
63
59
64
-
####Základní informace o tabulce
60
+
### Základní informace o tabulce
65
61
66
62
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.
V některých případech nás jako první při práci s daty napadne nějak si data zjednodušit. Například budeme chtít v DataFrame vybrat pouze některé sloupce, a to co nás nezajímá, můžeme zahodit.
126
-
127
-
K tomu použijeme výběr sloupců pomocí hranatých závorek. Zápis připomíná práci se seznamy - hranatou závorku napíšeme přímo za název proměnné, kde máme uložený `DataFrame`, a do ní vepíšeme název sloupce, který nás zajímá.
128
-
129
-
```py
130
-
print(nakupy['vec'])
131
-
```
132
-
133
-
```shell
134
-
0 Prací prášek
135
-
1 Savo
136
-
2 Toaletní papír
137
-
3 Pivo
138
-
4 Pytel na odpadky
139
-
5 Utěrky na nádobí
140
-
6 Toaletní papír
141
-
7 Pečící papír
142
-
8 Savo
143
-
9 Máslo
144
-
10 Káva
145
-
Name: vec, dtype: object
146
-
```
147
-
148
-
Zde je důležité říct, že pokud vybíráme pouze jeden sloupec, vrátí se nám takzvaná **Série** (`Series`), což je jiný datový typ než DataFrame. Sérii si představme jako jednorozměrnou tabulku.
149
-
150
-
Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy sloupců.
151
-
152
-
```py
153
-
print(nakupy[['jmeno', 'cena']])
154
-
```
155
-
156
-
```shell
157
-
jmeno cena
158
-
0 Petr 399
159
-
1 Ondra 80
160
-
2 Petr 65
161
-
3 Libor 124
162
-
4 Petr 75
163
-
5 Míša 130
164
-
6 Ondra 120
165
-
7 Míša 30
166
-
8 Zuzka 80
167
-
9 Pavla 50
168
-
10 Ondra 300
169
-
```
170
-
171
-
Tady se nám již vrátil datový typ DataFrame. Tohoto triku můžeme využít, když chceme získat pouze jeden sloupec, ale nechceme ho v datovém typu Série, ale jako DataFrame.
172
-
173
-
```py
174
-
print(nakupy[['vec']])
175
-
```
176
-
177
-
```shell
178
-
vec
179
-
0 Prací prášek
180
-
1 Savo
181
-
2 Toaletní papír
182
-
3 Pivo
183
-
4 Pytel na odpadky
184
-
5 Utěrky na nádobí
185
-
6 Toaletní papír
186
-
7 Pečící papír
187
-
8 Savo
188
-
9 Máslo
189
-
10 Káva
190
-
```
191
-
192
-
### Výběr řádků pomocí čísla řádku
193
-
194
-
Jak už víme, v `pandas` má každý řádek přiřazený index. Jako index můžeme zvolit některý ze sloupců. Pokud však tabulku načteme bez toho, abychom specifikovali index, `pandas` nám vytvoří **číselný index** automaticky. Je to něco podobného jako číslování řádků v Excelu.
195
-
196
-
K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` nám umožní ptát se na konkrétní záznam podobně jako u sekvencí, jsou zde přítomné i hranaté závorky. `iloc` tedy ve skutečnosti není funkce, ale kromě jiného typu závorek s ní pracujeme jako s funkcí.
197
-
198
-
Zkusme si zobrazit třeba **čtvrtý** nákup. Číslujeme tradičně od nuly, jistě tě tedy nepřekvapí, že napíšeme `nakupy.iloc[3]`.
199
-
200
-
```py
201
-
print(nakupy.iloc[3])
202
-
```
203
-
204
-
```shell
205
-
jmeno Libor
206
-
datum 2020-03-05
207
-
vec Pivo
208
-
cena 124
209
-
Name: 3, dtype: object
210
-
```
211
-
212
-
Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek jinak orientovaný. Výběr jednoho řádku nám vrátí Sérii stejně jako v případě výběru jediného sloupce. Pohled na tento řádek pak máme orientovaný na výšku.
213
-
214
-
Metoda `iloc[]` umožňuje pro výběr řádků použít rozsah ve formátu `od:do`. K tomu používáme **dvojtečku**. Před dvojtečku píšeme první řádek, který chceme vypsat a za dvojtečku první řádek, který již vy výpisu nebude. Pokud tedy například napíšeme `nakupy.iloc[3:5]`, získáme řádky s indexy 3 a 4, ale už ne řádek s indexem 5.
215
-
216
-
```py
217
-
print(nakupy.iloc[3:5])
218
-
```
219
-
220
-
```shell
221
-
jmeno datum vec cena
222
-
3 Libor 2020-03-05 Pivo 124
223
-
4 Petr 2020-03-18 Pytel na odpadky 75
224
-
```
225
-
226
-
Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojtečku psát 0, stačí napsat `iloc[:3]`.
227
-
228
-
```py
229
-
print(nakupy.iloc[:3])
230
-
```
231
-
232
-
```shell
233
-
jmeno datum vec cena
234
-
0 Petr 2020-02-05 Prací prášek 399
235
-
1 Ondra 2020-02-08 Savo 80
236
-
2 Petr 2020-02-24 Toaletní papír 65
237
-
```
238
-
239
-
Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řádků je 10, chceme vypsat řádky od osmého dále. Nyní se nabízí napsat číslo před dvojtečku. Píšeme tam ale 8, protože řádek, jehož číslo je před dvojtečkou, je vždy součástí výpisu.
240
-
241
-
```py
242
-
print(nakupy.iloc[8:])
243
-
```
244
-
245
-
```shell
246
-
jmeno datum vec cena
247
-
8 Zuzka 2020-06-05 Savo 80
248
-
9 Pavla 2020-06-13 Máslo 50
249
-
10 Ondra 2020-07-25 Káva 300
250
-
```
251
-
252
-
Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme. U seznamů už ale existoval trik použití záporného čísla. Ten můžeš použít i v `pandas`. Pokud napíšeš `iloc[-3:]`, získáš též poslední tři řádky.
253
-
254
-
```py
255
-
print(nakupy.iloc[-3:])
256
-
```
257
-
258
-
```shell
259
-
jmeno datum vec cena
260
-
8 Zuzka 2020-06-05 Savo 80
261
-
9 Pavla 2020-06-13 Máslo 50
262
-
10 Ondra 2020-07-25 Káva 300
263
-
```
264
-
265
-
266
-
#### Začátek a konec jinak
267
-
268
-
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. Kromě funkce `iloc`, z níž se ti možná už začala točit hlava, k tomu ještě můžeme použít funkce `head` a `tail`.
120
+
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`.
269
121
270
122
```py
271
123
print(nakupy.head())
@@ -294,58 +146,3 @@ print(nakupy.tail())
294
146
9 Pavla 2020-06-13 Máslo 50
295
147
10 Ondra 2020-07-25 Káva 300
296
148
```
297
-
298
-
#### Výběr řádků a sloupců podle čísla
299
-
300
-
Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho tabulek obsahuje spoustu různých informací a ne všechny nás musejí zajímat. Čísla sloupců zadáváme jako druhý parametr funkce `iloc`.
301
-
302
-
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
303
-
304
-
```py
305
-
print(nakupy.iloc[:5,0])
306
-
```
307
-
308
-
```shell
309
-
0 Petr
310
-
1 Ondra
311
-
2 Petr
312
-
3 Libor
313
-
4 Petr
314
-
Name: jmeno, dtype: object
315
-
```
316
-
317
-
U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně nemusí být vedle sebe. nás u nákupů asi bude nejvíce zajímat jméno a částka. Abychom dali dohromady dvě čísla, která neleží vedle sebe, můžeme použít seznam. Pro prvních pět nákupů tedy jako druhý parametr napíšeme `[0,3]`.
318
-
319
-
```py
320
-
print(nakupy.iloc[:5,[0,3]])
321
-
```
322
-
323
-
```shell
324
-
jmeno cena
325
-
0 Petr 399
326
-
1 Ondra 80
327
-
2 Petr 65
328
-
3 Libor 124
329
-
4 Petr 75
330
-
```
331
-
332
-
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
0 commit comments