Skip to content

Commit 1b3c93d

Browse files
committed
Prevod kapitoly Zakladni dotazy
Presun presuna na DataFrame a zpet do cteni na doma. Closes #25
1 parent cff3ab7 commit 1b3c93d

File tree

3 files changed

+193
-149
lines changed

3 files changed

+193
-149
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
## Převody dat na DataFrame a zpět
2+
3+
`DataFrame` nejsou uzavřeným světem, ale umožňují snadný převod na seznamy, případně můžeme naopak převést seznam na `DataFrame`.
4+
5+
### Převod DataFrame na seznam
6+
7+
K takovému převodu na seznam nám poslouží kombinace funkcí `to_numpy` a `tolist`. Převod totiž neprovádíme přímo, ale jako mezikrok jej převedeme na pole modulu `numpy`.
8+
9+
```py
10+
staty_list = staty.to_numpy().tolist()
11+
print(staty_list[0])
12+
```
13+
14+
```shell
15+
['Kabul', 'Asia', 'Southern Asia', 27657145, 652230.0, 27.8]
16+
```
17+
18+
Ve výsledných seznamech nám chybí názvy států. Potíž je v tom, že index se v Pandas nebere jako součást dat. Pokud chceme index vrátit do původního stavu a mít ho jako automaticky generovaná čísla řádků, můžeme použít metodu `reset_index`. S její pomocí pak už dokážeme dostat z DataFramu čistá data takto
19+
20+
```py
21+
staty_list = staty.reset_index().to_numpy().tolist()
22+
print(staty_list[0])
23+
```
24+
25+
```shell
26+
['Afghanistan', 'Kabul', 'Asia', 'Southern Asia', 27657145, 652230.0, 27.8]
27+
```
28+
29+
### Vytvoření DataFrame ze seznamu
30+
31+
Zkusme si nyní opačný postup, převedeme si seznam seznamů (což je jiný zápis dvourozměrné tabulky) na `DataFrame`. Jistě si vzpomínáš na příklad se známkami z testu, kterým jsme měli na prvním workshopu.
32+
33+
```py
34+
znamky = [
35+
['Petr', 2],
36+
['Roman', 1],
37+
['Jitka', 3],
38+
['Zuzana', 5],
39+
['Ondřej', 2],
40+
['Julie', 2],
41+
['Karel', 4],
42+
['Anna', 1],
43+
['Eva', 1]
44+
]
45+
```
46+
47+
Naším úkolem bylo spočítat průměrnou známku. K tomu jsme použili cyklus.
48+
49+
```py
50+
soucet = 0
51+
for radek in znamky:
52+
soucet = soucet + radek[1]
53+
prumer = soucet / len(znamky)
54+
```
55+
56+
Průměrnou známku ale můžeme spočítat i pomocí `pandas`. Pomocí funkce `DataFrame` převedeme proměnnou `znamky` na `DataFrame`. Abychom měli v `DataFrame` správné názvy sloupců, definujeme je jako parametr `columns`.
57+
58+
Následně vybereme data ve sloupci `znamka`. Protože jsme vybrali jeden sloupec, získáme sérii. Průměrnou hodnotu v sérii pak spočítáme pomocí funkce `mean`.
59+
60+
```py
61+
znamky = pandas.DataFrame(znamky, columns=['student', 'znamka'])
62+
prumer = znamky["znamka"].mean()
63+
```
64+
65+
Přehled všech funkcí, které pro sérii můžeš použít, opět najdeš [v dokumentaci](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html).
66+
67+
### Vytvoření DataFrame ze seznamu slovníků
68+
69+
Pokud jsi absolvovala Úvod do programování v Pythonu 2, znáš již též slovníky. I pole složené ze slovníků můžeme převést na `DataFrame`.
70+
71+
```py
72+
nakupy = [
73+
{"person": "Petr", "item": "Prací prášek", "value": 399},
74+
{"person": "Ondra", "item": "Savo", "value": 80},
75+
{"person": "Petr", "item": "Toaletní papír", "value": 65},
76+
{"person": "Libor", "item": "Pivo", "value": 124},
77+
{"person": "Petr", "item": "Pytel na odpadky", "value": 75},
78+
{"person": "Míša", "item": "Utěrky na nádobí", "value": 130},
79+
{"person": "Ondra", "item": "Toaletní papír", "value": 120},
80+
{"person": "Míša", "item": "Pečící papír", "value": 30},
81+
{"person": "Zuzka", "item": "Savo", "value": 80},
82+
{"person": "Pavla", "item": "Máslo", "value": 50},
83+
{"person": "Ondra", "item": "Káva", "value": 300}
84+
]
85+
```
86+
87+
Výhodou je, že nyní nemusíme přidávat názvy sloupců, protože ty už funkce `DataFrame` získá z klíčů slovníků.
88+
89+
```py
90+
nakupy = pandas.DataFrame(nakupy)
91+
nakupy.info()
92+
```
93+
```shell
94+
<class 'pandas.core.frame.DataFrame'>
95+
RangeIndex: 11 entries, 0 to 10
96+
Data columns (total 3 columns):
97+
# Column Non-Null Count Dtype
98+
--- ------ -------------- -----
99+
0 person 11 non-null object
100+
1 item 11 non-null object
101+
2 value 11 non-null int64
102+
dtypes: int64(1), object(2)
103+
memory usage: 392.0+ bytes
104+
```

python-pro-data-1/zakladni-dotazy/entry.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ lead: Vyzkoušíme si základní dotazy, které pandas umí
33
sections:
44
- zakladni-dotazy
55
- excs
6+
- cteni-na-doma

0 commit comments

Comments
 (0)