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