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
@@ -43,18 +43,18 @@ Funkce `read_csv` má spoustu nepovinných parametrů, o kterých si můžeme p
43
43
Celý DataFrame vypíšeme na obrazovku pomocí funkce `print()`.
44
44
45
45
```shell
46
-
JménoDatumVěc Částka v korunách
47
-
0 Petr 2020-02-05 Prací prášek 399
48
-
1 Ondra 2020-02-08 Savo 80
49
-
2 Petr 2020-02-24 Toaletní papír 65
50
-
3 Libor 2020-03-05 Pivo 124
51
-
4 Petr 2020-03-18 Pytel na odpadky 75
52
-
5 Míša 2020-03-30 Utěrky na nádobí 130
53
-
6 Ondra 2020-04-22 Toaletní papír 120
54
-
7 Míša 2020-05-05 Pečící papír 30
55
-
8 Zuzka 2020-06-05 Savo 80
56
-
9 Pavla 2020-06-13 Máslo 50
57
-
10 Ondra 2020-07-25 Káva 300
46
+
jmenodatumvec cena
47
+
0 Petr 2020-02-05 Prací prášek 399
48
+
1 Ondra 2020-02-08 Savo 80
49
+
2 Petr 2020-02-24 Toaletní papír 65
50
+
3 Libor 2020-03-05 Pivo 124
51
+
4 Petr 2020-03-18 Pytel na odpadky 75
52
+
5 Míša 2020-03-30 Utěrky na nádobí 130
53
+
6 Ondra 2020-04-22 Toaletní papír 120
54
+
7 Míša 2020-05-05 Pečící papír 30
55
+
8 Zuzka 2020-06-05 Savo 80
56
+
9 Pavla 2020-06-13 Máslo 50
57
+
10 Ondra 2020-07-25 Káva 300
58
58
```
59
59
60
60
Všimni si, že `pandas` nám přidal nový sloupec s číslem řádku. Jedná se o **index**, se kterým budeme později pracovat. Index je hodnota, která identifikuje řádek. V některých případech nemusíme jako index používat číslo řádku, ale můžeme jako index vybrat některý ze sloupců. Obdobnou funkci má v databázích **primární klíč**. Jako *best practice* se většinou uvádí, že index by měl být **unikátní**, i když to `pandas` (na rozdíl od právě databází) nevyžadují. Mohli bychom si tedy jako index zvolit například sloupec `Jmeno`, ale tím bychom si zadělávali na problém do budoucna (například v tom, že by práce s `DataFrame` byla [pomalejší](https://stackoverflow.com/q/16626058/4693904)).
@@ -75,12 +75,12 @@ nakupy.info()
75
75
<class 'pandas.core.frame.DataFrame'>
76
76
RangeIndex: 11 entries, 0 to 10
77
77
Data columns (total 4 columns):
78
-
# Column Non-Null Count Dtype
79
-
--- ------ -------------- -----
80
-
0 Jméno 11 non-null object
81
-
1 Datum 11 non-null object
82
-
2 Věc 11 non-null object
83
-
3 Částka v korunách 11 non-null int64
78
+
# Column Non-Null Count Dtype
79
+
--- ------ -------------- -----
80
+
0 jmeno 11 non-null object
81
+
1 datum 11 non-null object
82
+
2 vec 11 non-null object
83
+
3 cena 11 non-null int64
84
84
dtypes: int64(1), object(3)
85
85
memory usage: 480.0+ bytes
86
86
```
@@ -116,7 +116,7 @@ print(nakupy.columns)
116
116
```
117
117
118
118
```shell
119
-
Index(['Jméno', 'Datum', 'Věc', 'Částka v korunách'], dtype='object')
@@ -127,7 +127,7 @@ V některých případech nás jako první při práci s daty napadne nějak si
127
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
128
129
129
```py
130
-
print(nakupy['Věc'])
130
+
print(nakupy['vec'])
131
131
```
132
132
133
133
```shell
@@ -142,40 +142,40 @@ print(nakupy['Věc'])
142
142
8 Savo
143
143
9 Máslo
144
144
10 Káva
145
-
Name: Věc, dtype: object
145
+
Name: vec, dtype: object
146
146
```
147
147
148
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
149
150
150
Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy sloupců.
151
151
152
152
```py
153
-
print(nakupy[['Jméno', 'Částka v korunách']])
153
+
print(nakupy[['jmeno', 'cena']])
154
154
```
155
155
156
156
```shell
157
-
Jméno Částka v korunách
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
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
169
```
170
170
171
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
172
173
173
```py
174
-
print(nakupy[['Věc']])
174
+
print(nakupy[['vec']])
175
175
```
176
176
177
177
```shell
178
-
Věc
178
+
vec
179
179
0 Prací prášek
180
180
1 Savo
181
181
2 Toaletní papír
@@ -202,10 +202,10 @@ print(nakupy.iloc[3])
202
202
```
203
203
204
204
```shell
205
-
Jméno Libor
206
-
Datum 2020-03-05
207
-
Věc Pivo
208
-
Částka v korunách 124
205
+
jmeno Libor
206
+
datum 2020-03-05
207
+
vec Pivo
208
+
cena 124
209
209
Name: 3, dtype: object
210
210
```
211
211
@@ -218,9 +218,9 @@ print(nakupy.iloc[3:5])
218
218
```
219
219
220
220
```shell
221
-
JménoDatumVěc Částka v korunách
222
-
3 Libor 2020-03-05 Pivo 124
223
-
4 Petr 2020-03-18 Pytel na odpadky
221
+
jmenodatumvec cena
222
+
3 Libor 2020-03-05 Pivo 124
223
+
4 Petr 2020-03-18 Pytel na odpadky 75
224
224
```
225
225
226
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]`.
@@ -230,10 +230,10 @@ print(nakupy.iloc[:3])
230
230
```
231
231
232
232
```shell
233
-
JménoDatumVěc Částka v korunách
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
233
+
jmenodatumvec 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
237
```
238
238
239
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.
@@ -243,10 +243,10 @@ print(nakupy.iloc[8:])
243
243
```
244
244
245
245
```shell
246
-
JménoDatumVěc Částka v korunách
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
246
+
jmenodatumvec 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
250
```
251
251
252
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.
@@ -256,10 +256,10 @@ print(nakupy.iloc[-3:])
256
256
```
257
257
258
258
```shell
259
-
JménoDatumVěc Částka v korunách
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
259
+
jmenodatumvec 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
263
```
264
264
265
265
@@ -272,12 +272,12 @@ print(nakupy.head())
272
272
```
273
273
274
274
```shell
275
-
JménoDatumVěc Částka v korunách
276
-
0 Petr 2020-02-05 Prací prášek 399
277
-
1 Ondra 2020-02-08 Savo 80
278
-
2 Petr 2020-02-24 Toaletní papír 65
279
-
3 Libor 2020-03-05 Pivo 124
280
-
4 Petr 2020-03-18 Pytel na odpadky 75
275
+
jmenodatumvec cena
276
+
0 Petr 2020-02-05 Prací prášek 399
277
+
1 Ondra 2020-02-08 Savo 80
278
+
2 Petr 2020-02-24 Toaletní papír 65
279
+
3 Libor 2020-03-05 Pivo 124
280
+
4 Petr 2020-03-18 Pytel na odpadky 75
281
281
```
282
282
283
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.
@@ -287,12 +287,12 @@ print(nakupy.tail())
287
287
```
288
288
289
289
```shell
290
-
JménoDatumVěc Částka v korunách
291
-
6 Ondra 2020-04-22 Toaletní papír 120
292
-
7 Míša 2020-05-05 Pečící papír 30
293
-
8 Zuzka 2020-06-05 Savo 80
294
-
9 Pavla 2020-06-13 Máslo 50
295
-
10 Ondra 2020-07-25 Káva 300
290
+
jmenodatumvec cena
291
+
6 Ondra 2020-04-22 Toaletní papír 120
292
+
7 Míša 2020-05-05 Pečící papír 30
293
+
8 Zuzka 2020-06-05 Savo 80
294
+
9 Pavla 2020-06-13 Máslo 50
295
+
10 Ondra 2020-07-25 Káva 300
296
296
```
297
297
298
298
#### Výběr řádků a sloupců podle čísla
@@ -311,7 +311,7 @@ print(nakupy.iloc[:5,0])
311
311
2 Petr
312
312
3 Libor
313
313
4 Petr
314
-
Name: Jméno, dtype: object
314
+
Name: jmeno, dtype: object
315
315
```
316
316
317
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]`.
0 commit comments