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: python-pro-data-1/nacteni-dat/nacteni-dat.md
+98-43Lines changed: 98 additions & 43 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -28,21 +28,21 @@ Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce se sezn
28
28
29
29
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
30
31
-
Abychom tabulku načetli jako `DataFrame`, otevřeme si nejprve Python konzoli, importujeme modul `pandas` a načteme CSV soubor pomocí funkce `read_csv().`
31
+
Abychom tabulku načetli jako `DataFrame`, vytvoříme si nový Python skript, importujeme modul `pandas` a načteme CSV soubor pomocí funkce `read_csv().`
32
32
33
-
```pycon
34
-
>>> import pandas
35
-
>>> nakupy = pandas.read_csv('nakupy.csv')
33
+
```py
34
+
import pandas
35
+
nakupy = pandas.read_csv('nakupy.csv')
36
+
print(nakupy)
36
37
```
37
38
38
39
**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](https://pandas.pydata.org/docs/). Například funkce `read_csv` je [popsána zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html). Dokumentaci k samotnému DataFrame najdeš [zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html).
39
40
40
41
Funkce `read_csv` má spoustu nepovinných parametrů, o kterých si můžeme přečíst [v dokumentaci](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html). 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 `nakupy.csv` ale používá čárku, takže nyní nic měnit nemusíš.
41
42
42
-
Celý DataFrame vypíšeme na obrazovku tak, že zobrazíme přímo proměnnou `nakupy`.
43
+
Celý DataFrame vypíšeme na obrazovku pomocí funkce `print()`.
43
44
44
-
```pycon
45
-
>>> nakupy
45
+
```shell
46
46
Jméno Datum Věc Částka v korunách
47
47
0 Petr 2020-02-05 Prací prášek 399
48
48
1 Ondra 2020-02-08 Savo 80
@@ -65,8 +65,13 @@ Pandas nabízí kromě funkce `read_csv()` také funkci pro čtení formátu JSO
65
65
66
66
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.
67
67
68
-
```pycon
69
-
>>> nakupy.info()
68
+
```py
69
+
import pandas
70
+
nakupy = pandas.read_csv('nakupy.csv')
71
+
nakupy.info()
72
+
```
73
+
74
+
```shell
70
75
<class 'pandas.core.frame.DataFrame'>
71
76
RangeIndex: 11 entries, 0 to 10
72
77
Data columns (total 4 columns):
@@ -82,24 +87,35 @@ memory usage: 480.0+ bytes
82
87
83
88
Počet řádků a sloupců můžeme získat z vlastnosti `shape`:
84
89
85
-
```pycon
86
-
>>> nakupy.shape
90
+
```py
91
+
import pandas
92
+
nakupy = pandas.read_csv('nakupy.csv')
93
+
print(nakupy.shape)
94
+
```
95
+
96
+
```shell
87
97
(11, 4)
88
98
```
89
99
90
-
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `info` je ve skutečnosti funkce třídy `DataFrame`.
100
+
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `info` je ve skutečnosti funkce třídy `DataFrame`.
91
101
92
-
`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:
102
+
`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:
93
103
94
-
```pycon
95
-
>>> nakupy.shape[0]
104
+
```py
105
+
print(nakupy.shape[0])
106
+
```
107
+
108
+
```shell
96
109
11
97
110
```
98
111
99
112
Názvy všech sloupců pak z vlastnosti `columns`:
100
113
101
-
```pycon
102
-
>>> nakupy.columns
114
+
```py
115
+
print(nakupy.columns)
116
+
```
117
+
118
+
```shell
103
119
Index(['Jméno', 'Datum', 'Věc', 'Částka v korunách'], dtype='object')
104
120
```
105
121
@@ -110,8 +126,11 @@ V některých případech nás jako první při práci s daty napadne nějak si
110
126
111
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á.
112
128
113
-
```pycon
114
-
>>> nakupy['Věc']
129
+
```py
130
+
print(nakupy['Věc'])
131
+
```
132
+
133
+
```shell
115
134
0 Prací prášek
116
135
1 Savo
117
136
2 Toaletní papír
@@ -130,8 +149,11 @@ Zde je důležité říct, že pokud vybíráme pouze jeden sloupec, vrátí se
130
149
131
150
Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy sloupců.
132
151
133
-
```pycon
134
-
>>> nakupy[['Jméno', 'Částka v korunách']]
152
+
```py
153
+
print(nakupy[['Jméno', 'Částka v korunách']])
154
+
```
155
+
156
+
```shell
135
157
Jméno Částka v korunách
136
158
0 Petr 399
137
159
1 Ondra 80
@@ -148,8 +170,11 @@ Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy
148
170
149
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.
150
172
151
-
```pycon
152
-
>>> nakupy[['Věc']]
173
+
```py
174
+
print(nakupy[['Věc']])
175
+
```
176
+
177
+
```shell
153
178
Věc
154
179
0 Prací prášek
155
180
1 Savo
@@ -172,8 +197,11 @@ K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` ná
172
197
173
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]`.
174
199
175
-
```pycon
176
-
>>> nakupy.iloc[3]
200
+
```py
201
+
print(nakupy.iloc[3])
202
+
```
203
+
204
+
```shell
177
205
Jméno Libor
178
206
Datum 2020-03-05
179
207
Věc Pivo
@@ -185,17 +213,23 @@ Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek
185
213
186
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.
187
215
188
-
```pycon
189
-
>>> nakupy.iloc[3:5]
216
+
```py
217
+
print(nakupy.iloc[3:5])
218
+
```
219
+
220
+
```shell
190
221
Jméno Datum Věc Částka v korunách
191
222
3 Libor 2020-03-05 Pivo 124
192
223
4 Petr 2020-03-18 Pytel na odpadky
193
224
```
194
225
195
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]`.
196
227
197
-
```pycon
198
-
>>> nakupy.iloc[:3]
228
+
```py
229
+
print(nakupy.iloc[:3])
230
+
```
231
+
232
+
```shell
199
233
Jméno Datum Věc Částka v korunách
200
234
0 Petr 2020-02-05 Prací prášek 399
201
235
1 Ondra 2020-02-08 Savo 80
@@ -204,8 +238,11 @@ Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojteč
204
238
205
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.
206
240
207
-
```pycon
208
-
>>> nakupy.iloc[8:]
241
+
```py
242
+
print(nakupy.iloc[8:])
243
+
```
244
+
245
+
```shell
209
246
Jméno Datum Věc Částka v korunách
210
247
8 Zuzka 2020-06-05 Savo 80
211
248
9 Pavla 2020-06-13 Máslo 50
@@ -214,8 +251,11 @@ Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řá
214
251
215
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.
216
253
217
-
```pycon
218
-
>>> nakupy.iloc[-3:]
254
+
```py
255
+
print(nakupy.iloc[-3:])
256
+
```
257
+
258
+
```shell
219
259
Jméno Datum Věc Částka v korunách
220
260
8 Zuzka 2020-06-05 Savo 80
221
261
9 Pavla 2020-06-13 Máslo 50
@@ -227,8 +267,11 @@ Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme.
227
267
228
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`.
229
269
230
-
```pycon
231
-
>>> nakupy.head()
270
+
```py
271
+
print(nakupy.head())
272
+
```
273
+
274
+
```shell
232
275
Jméno Datum Věc Částka v korunách
233
276
0 Petr 2020-02-05 Prací prášek 399
234
277
1 Ondra 2020-02-08 Savo 80
@@ -239,8 +282,11 @@ Na prvních a posledních několik řádků se chceme podívat často, hlavně v
239
282
240
283
Č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.
241
284
242
-
```pycon
243
-
>>> nakupy.tail()
285
+
```py
286
+
print(nakupy.tail())
287
+
```
288
+
289
+
```shell
244
290
Jméno Datum Věc Částka v korunách
245
291
6 Ondra 2020-04-22 Toaletní papír 120
246
292
7 Míša 2020-05-05 Pečící papír 30
@@ -255,8 +301,11 @@ Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho ta
255
301
256
302
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
257
303
258
-
```pycon
259
-
>>> nakupy.iloc[:5,0]
304
+
```py
305
+
print(nakupy.iloc[:5,0])
306
+
```
307
+
308
+
```shell
260
309
0 Petr
261
310
1 Ondra
262
311
2 Petr
@@ -267,8 +316,11 @@ Name: Jméno, dtype: object
267
316
268
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]`.
269
318
270
-
```pycon
271
-
>>> nakupy.iloc[:5,[0,3]]
319
+
```py
320
+
print(nakupy.iloc[:5,[0,3]])
321
+
```
322
+
323
+
```shell
272
324
Jméno Částka v korunách
273
325
0 Petr 399
274
326
1 Ondra 80
@@ -279,8 +331,11 @@ U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně
279
331
280
332
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
0 commit comments