54 Andmefreim (DataFrame)
Juba seeria abil saab andmeid teatud määral töödelda ja illustreerida. Veelgi põnevamaid võimalusi pakub aga andmefreim (DataFrame), mis on sisuliselt andmetabel. Andmefreimist võib mõelda kui ka mitmest seeriast koosnevast kogumist, mis on omavahel ühendatud. Seeria tähistab andmefreimis (DataFrame) ühte veergu.
Veerg 1 (Seeria 1) |
Veerg 2 (Seeria 2) |
Veerg 3 (Seeria 3) |
|
0 | |||
1 | |||
2 |
Andmefreimis võivad olla erinevat tüüpi andmed ja selle suurust saab muuta. Ridadele ja veergudele saab rakendada aritmeetilisi funktsioone – näiteks saab veergusid liita, lahutada, korrutada ja jagada ning arvutada rea või veeru kaupa selle maksimumi, keskmist jpm.
Andmefreimi loomine
Pandase andmefreimi on võimalik luua mitmel viisil. Näiteks järjendite, sõnastiku või sõnastiku, mis koosneb järjenditest, põhjal.
Loome andmefreimi sõnastiku, mille väärtused on järjendid, põhjal. Olgu meil sõnastik, milles on õpilaste õppeainete hinded. Sõnastiku võtmeteks on veerupealkirjad ja väärtusteks on hinded järjendis. Andmefreimi loomiseks tuleb kasutada funktsiooni DataFrame
, mille argumendiks on sõnastik.
import pandas as pd sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel'], 'Matemaatika': [4, 5, 3, 4], 'Programmeerimine': [4, 5, 5, 4]} hinded = pd.DataFrame(sonastik) print(hinded)
>>> %Run guido.py Nimi Matemaatika Programmeerimine 0 Malle 4 4 1 Saara 5 5 2 Kusti 3 5 3 Aksel 4 4
Samuti võib andmefreimi luua Pythoni kahemõõtmeliste järjendite abil, sest sisuliselt on needki tabelid. Loome kahemõõtmelise järjendi, milles on andmed ja veergude pealkirjade jaoks kasutame DataFrame
funktsiooni parameetrit columns
, mille väärtuseks anname veergude pealkirjade järjendi. Juhul kui jätame veergude pealkirjad defineerimata, siis vaikimisi lisatakse veergudele indeksid alates 0-st.
lst = [['Malle', 4, 4], ['Saara', 5, 5], ['Kusti', 3, 5], ['Aksel', 4, 4]] hinded = pd.DataFrame(lst, columns=['Nimi', 'Matemaatika', 'Programmeerimine']) print(hinded)
>>> %Run guido.py Nimi Matemaatika Programmeerimine 0 Malle 4 4 1 Saara 5 5 2 Kusti 3 5 3 Aksel 4 4
Kuna andmefreimist võib mõelda kui omavahel ühendatud seeriatest, siis võib andmefreimi luua ka seeriate abil. Selleks, et erinevaid seeriad omavahel ühendada kasutame concat
funktsiooni, mille argumendiks on seeriate järjend. Lisaks tuleb kasutada axis
parameetrit, mis määrab kas seeriad ühendatakse ridade (axis=0
, vaikeväärtus) või veergude järgi (axis=1
). Järgmises näites ühendame seeriad veergude järgi ja lisame igale seeriale ka selle nime name
parameetrit kasutades, mis on sisuliselt veeru pealkiri tabelis.
veerg_1 = pd.Series(['Malle', 'Saara', 'Kusti', 'Aksel'], name='Nimi') veerg_2 = pd.Series([4, 5, 3, 4], name='Matemaatika') veerg_3 = pd.Series([4, 5, 5, 4], name='Programmeerimine') veerud = [veerg_1, veerg_2, veerg_3] hinded = pd.concat(veerud, axis=1) print(hinded)
>>> %Run guido.py Nimi Matemaatika Programmeerimine 0 Malle 4 4 1 Saara 5 5 2 Kusti 3 5 3 Aksel 4 4
Võimalusi, kuidas andmefreimi luua on veelgi, näiteks sõnastiku põhjal, mille väärtusteks on omakorda seeriad või näiteks ka järjendi põhjal, mille elementideks kaheelemendilised ennikud. Oluline on, et kasutatav andmestruktuuri oleks võimalik tsükliliselt läbida. Andmete analüüsimisel loetakse andmed tavaliselt failist, tüüpiliselt CSV failidest. Andmefreimi on võimalik ka otse luua CSV faili sisu põhjal (loe täpsemalt peatükist “Teatrikülastuse näide” või “COVID-19 näide”).
Järgnevas tabelis on esitatud DataFrame funktsiooni parameetrid ja nende selgitused. Andmefreimi puhul ei pea kõiki parameetreid defineerimisel kasutama, parameetri ärajätmisel kasutatakse selle vaikimisi määratud väärtust.
Parameeter | Selgitus |
data |
Andmed võivad olla n-dimensioonilise andmemassiivi, sõnastiku, konstandi, järjendi või teise andmefreimi kujul. Näiteks pandas.DataFrame([['Ruudi', 12], ['Malle', 10], ...]) |
index |
Ridade siltide järjend, pikkus peab olema võrdne ridade arvuga. Vaikimisi määratakse arvud 0, 1, 2, …, n-1, kus n on ridade arv. Näiteks index=['Sulev', 'Guido', 'Ada', 'Moona'] |
columns |
Veergude siltide järjend, pikkus peab olema võrdne veergude arvuga. Vaikimisi määratakse arvud 0, 1, 2, …, m-1, kus m on veergude arv. Näiteks columns=['Nimi', 'Matemaatika', 'Programmeerimine'] |
dtype |
Andmetüüp, mida DataFrames olevatele andmetele määratakse. Vaikimisi järeldatakse andmetest. Näiteks dtype='float64' |
copy |
Määrab, kas andmetest, mida kasutatakse, tehakse koopia. Vaikimisi väärtus False . |