51 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.

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, Ago Luberg, Birgy Lorenz, Einar Kivisalu, Meelis Antoi, ja Säde Mai Krusberg poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut