53 Andmete lisamine andmefreimi

Sageli võib vaja minna võimalust lisada andmetabelisse uusi ridu või veerge. Lisame eelmise hinnete näitetabelisse veel ühe õpilase hinded. Selleks, saab kasutada append funktsiooni, mille abil lisatakse rida kõige viimaseks. Meeles tuleb pidada seda, et append ei muteeri andmefreimi, vaid loob uue andmefreimi uue reaga. Selle funktsiooni abil saab lisada uue rea sõnastikuna, järjendina, seeriana või datafreimina.

sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel'],
            'Matemaatika': [4, 5, 3, 4],
            'Programmeerimine': [4, 5, 5, 4]}

hinded = pd.DataFrame(sonastik)
uus_rida = {'Nimi': 'Kalmer',
            'Matemaatika': 5,
            'Programmeerimine': 3}

# ignore_index=True --> uuele reale lisatakse index,
# selle ära jätmisel tekib viga
koik_hinded = hinded.append(uus_rida, ignore_index=True)

print(koik_hinded)
>>> %Run guido.py
       Nimi  Matemaatika  Programmeerimine
  0   Malle            4                 4
  1   Saara            5                 5
  2   Kusti            3                 5
  3   Aksel            4                 4
  4  Kalmer            5                 3

Uue veeru saab lisada andmefreimi väga lihtsalt. Lisame hinnetetabelisse juurde bioloogia hinded. Seda saab teha sarnaselt sõnastikku uue elemendi lisamisega, kus uus võti kirjutati sõnastiku nime järel nurksulgude vahele ja selle omistati uus väärtus, nt sonastik['võti'] = 6. Andmefreimi puhul saab nii lisada terve veeru, kus andmefreimi nime järel on nurksulgudes uue veeru nimi, millele omistatakse seeria uute väärtustega.

sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],
            'Matemaatika': [4, 5, 3, 4, 5],
            'Programmeerimine': [4, 5, 5, 4, 3]}

hinded = pd.DataFrame(sonastik)

hinded["Bioloogia"] = pd.Series([4, 5, 3, 5, 5])

print(hinded)
>>> %Run guido.py
       Nimi  Matemaatika  Programmeerimine  Bioloogia
  0   Malle            4                 4          4
  1   Saara            5                 5          5
  2   Kusti            3                 5          3
  3   Aksel            4                 4          5
  4  Kalmer            5                 3          5

Samamoodi saab ka teiste veergude põhjal arvutada uue veeru ning lisada selle tabelisse. Arvutame õpilaste keskmised hinded ja lisame need tabelisse. Keskmise hinde arvutamiseks kasutame funktsiooni mean. Samuti ümardame tulemused kaks kohta pärast koma.

sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],
            'Matemaatika': [4, 5, 3, 4, 5],
            'Programmeerimine': [4, 5, 5, 4, 3]}

hinded = pd.DataFrame(sonastik)

# Bioloogia hinnete veeru lisamine
hinded["Bioloogia"] = pd.Series([4, 5, 3, 5, 5])

# Keskmise hinde veeru lisamine ja ümardamine kaks kohta pärast koma
hinded["Keskmine hinne"] = hinded.mean(axis=1).round(2)

print(hinded)
>>> %Run guido.py
       Nimi  Matemaatika  Programmeerimine  Bioloogia  Keskmine hinne
  0   Malle            4                 4          4            4.00
  1   Saara            5                 5          5            5.00
  2   Kusti            3                 5          3            3.67
  3   Aksel            4                 4          5            4.33
  4  Kalmer            5                 3          5            4.33

Järgmisena vaatame olukorda, kus on vaja kaks tabelit omavahel liita. Olgu meil andmefreim, kus on ühe teise rühma õpilaste hinded.

sonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],
            'Matemaatika': [4, 5, 4, 5],
            'Programmeerimine': [4, 5, 4, 3],
            'Bioloogia': [5, 2, 3, 4]}

hinded_B = pd.DataFrame(sonastik_B)

Me soovime need liita varasemalt näidetes kasutatud hinnetetabeliga. Andmefreimide ühendamiseks saab kasutada funktsiooni concat, mille argumendiks on liidetavate tabelite järjend.

sonastik_A = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],
            'Matemaatika': [4, 5, 3, 4, 5],
            'Programmeerimine': [4, 5, 5, 4, 3]}

sonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],
            'Matemaatika': [4, 5, 4, 5],
            'Programmeerimine': [4, 5, 4, 3],
            'Bioloogia': [5, 2, 3, 4]}

hinded_A = pd.DataFrame(sonastik_A)
hinded_B = pd.DataFrame(sonastik_B)

# ignore_index=True --> indekseerimist jätkatakse ka uute ridadega
hinded = pd.concat([hinded_A, hinded_B], ignore_index=True)
print(hinded)
>>> %Run guido.py
       Nimi  Matemaatika  Programmeerimine  Bioloogia
  0   Malle            4                 4        NaN
  1   Saara            5                 5        NaN
  2   Kusti            3                 5        NaN
  3   Aksel            4                 4        NaN
  4  Kalmer            5                 3        NaN
  5   Sulev            4                 4        5.0
  6   Guido            5                 5        2.0
  7     Ada            4                 4        3.0
  8   Moona            5                 3        4.0

Uute andmete lisamiseks andefreimi pakub Pandas veel võimalusi, näiteks join, stack ja merge. Nende kohta võid lähemalt uurida Pandase dokumentatsioonist.

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, ja Säde Mai Krusberg jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut