{"id":684,"date":"2020-12-29T14:53:50","date_gmt":"2020-12-29T14:53:50","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=684"},"modified":"2020-12-29T15:00:57","modified_gmt":"2020-12-29T15:00:57","slug":"andmete-lisamine-andmefreimi","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/andmete-lisamine-andmefreimi\/","title":{"raw":"Andmete lisamine andmefreimi","rendered":"Andmete lisamine andmefreimi"},"content":{"raw":"Sageli v\u00f5ib vaja minna v\u00f5imalust lisada andmetabelisse uusi ridu v\u00f5i veerge. Lisame eelmise hinnete n\u00e4itetabelisse veel \u00fche \u00f5pilase hinded. Selleks, saab kasutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">append<\/code> funktsiooni, mille abil lisatakse rida k\u00f5ige viimaseks. Meeles tuleb pidada seda, et <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">append<\/code> ei muteeri andmefreimi, vaid loob uue andmefreimi uue reaga. Selle funktsiooni abil saab lisada uue rea s\u00f5nastikuna, j\u00e4rjendina, seeriana v\u00f5i datafreimina.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel'],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Matemaatika': [4, 5, 3, 4],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Programmeerimine': [4, 5, 5, 4]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\nuus_rida = {'Nimi': 'Kalmer',\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Matemaatika': 5,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Programmeerimine': 3}\r\n\r\n# ignore_index=True --&gt; uuele reale lisatakse index,\r\n# selle \u00e4ra j\u00e4tmisel tekib viga\r\nkoik_hinded = hinded.append(uus_rida, ignore_index=True)\r\n\r\nprint(koik_hinded)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine\r\n  0   Malle            4                 4\r\n  1   Saara            5                 5\r\n  2   Kusti            3                 5\r\n  3   Aksel            4                 4\r\n  4  Kalmer            5                 3\r\n<\/pre>\r\nUue veeru saab lisada andmefreimi v\u00e4ga lihtsalt. Lisame hinnetetabelisse juurde bioloogia hinded. Seda saab teha sarnaselt s\u00f5nastikku uue elemendi lisamisega, kus uus v\u00f5ti kirjutati s\u00f5nastiku nime j\u00e4rel nurksulgude vahele ja selle omistati uus v\u00e4\u00e4rtus, nt <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">sonastik['v\u00f5ti'] = 6<\/code>. Andmefreimi puhul saab nii lisada terve veeru, kus andmefreimi nime j\u00e4rel on nurksulgudes uue veeru nimi, millele omistatakse seeria uute v\u00e4\u00e4rtustega.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\n\r\nhinded[\"Bioloogia\"] = pd.Series([4, 5, 3, 5, 5])\r\n\r\nprint(hinded)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia\r\n  0   Malle            4                 4          4\r\n  1   Saara            5                 5          5\r\n  2   Kusti            3                 5          3\r\n  3   Aksel            4                 4          5\r\n  4  Kalmer            5                 3          5\r\n<\/pre>\r\nSamamoodi saab ka teiste veergude p\u00f5hjal arvutada uue veeru ning lisada selle tabelisse. Arvutame \u00f5pilaste keskmised hinded ja lisame need tabelisse. Keskmise hinde arvutamiseks kasutame funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">mean<\/code>. Samuti \u00fcmardame tulemused kaks kohta p\u00e4rast koma.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\n\r\n# Bioloogia hinnete veeru lisamine\r\nhinded[\"Bioloogia\"] = pd.Series([4, 5, 3, 5, 5])\r\n\r\n# Keskmise hinde veeru lisamine ja \u00fcmardamine kaks kohta p\u00e4rast koma\r\nhinded[\"Keskmine hinne\"] = hinded.mean(axis=1).round(2)\r\n\r\nprint(hinded)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia  Keskmine hinne\r\n  0   Malle            4                 4          4            4.00\r\n  1   Saara            5                 5          5            5.00\r\n  2   Kusti            3                 5          3            3.67\r\n  3   Aksel            4                 4          5            4.33\r\n  4  Kalmer            5                 3          5            4.33\r\n<\/pre>\r\nJ\u00e4rgmisena vaatame olukorda, kus on vaja kaks tabelit omavahel liita. Olgu meil andmefreim, kus on \u00fche teise r\u00fchma \u00f5pilaste hinded.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],\r\n            'Matemaatika': [4, 5, 4, 5],\r\n            'Programmeerimine': [4, 5, 4, 3],\r\n            'Bioloogia': [5, 2, 3, 4]}\r\n\r\nhinded_B = pd.DataFrame(sonastik_B)<\/pre>\r\nMe soovime need liita varasemalt n\u00e4idetes kasutatud hinnetetabeliga. Andmefreimide \u00fchendamiseks saab kasutada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">concat<\/code>, mille argumendiks on liidetavate tabelite j\u00e4rjend.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik_A = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nsonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],\r\n            'Matemaatika': [4, 5, 4, 5],\r\n            'Programmeerimine': [4, 5, 4, 3],\r\n            'Bioloogia': [5, 2, 3, 4]}\r\n\r\nhinded_A = pd.DataFrame(sonastik_A)\r\nhinded_B = pd.DataFrame(sonastik_B)\r\n\r\n# ignore_index=True --&gt; indekseerimist j\u00e4tkatakse ka uute ridadega\r\nhinded = pd.concat([hinded_A, hinded_B], ignore_index=True)\r\nprint(hinded)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia\r\n  0   Malle            4                 4        NaN\r\n  1   Saara            5                 5        NaN\r\n  2   Kusti            3                 5        NaN\r\n  3   Aksel            4                 4        NaN\r\n  4  Kalmer            5                 3        NaN\r\n  5   Sulev            4                 4        5.0\r\n  6   Guido            5                 5        2.0\r\n  7     Ada            4                 4        3.0\r\n  8   Moona            5                 3        4.0\r\n<\/pre>\r\nUute andmete lisamiseks andefreimi pakub Pandas veel v\u00f5imalusi, n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">join<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">stack<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">merge<\/code>. Nende kohta v\u00f5id l\u00e4hemalt uurida Pandase <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/index.html\">dokumentatsioonist<\/a>.","rendered":"<p>Sageli v\u00f5ib vaja minna v\u00f5imalust lisada andmetabelisse uusi ridu v\u00f5i veerge. Lisame eelmise hinnete n\u00e4itetabelisse veel \u00fche \u00f5pilase hinded. Selleks, saab kasutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">append<\/code> funktsiooni, mille abil lisatakse rida k\u00f5ige viimaseks. Meeles tuleb pidada seda, et <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">append<\/code> ei muteeri andmefreimi, vaid loob uue andmefreimi uue reaga. Selle funktsiooni abil saab lisada uue rea s\u00f5nastikuna, j\u00e4rjendina, seeriana v\u00f5i datafreimina.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel'],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Matemaatika': [4, 5, 3, 4],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Programmeerimine': [4, 5, 5, 4]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\nuus_rida = {'Nimi': 'Kalmer',\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Matemaatika': 5,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 'Programmeerimine': 3}\r\n\r\n# ignore_index=True --&gt; uuele reale lisatakse index,\r\n# selle \u00e4ra j\u00e4tmisel tekib viga\r\nkoik_hinded = hinded.append(uus_rida, ignore_index=True)\r\n\r\nprint(koik_hinded)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine\r\n  0   Malle            4                 4\r\n  1   Saara            5                 5\r\n  2   Kusti            3                 5\r\n  3   Aksel            4                 4\r\n  4  Kalmer            5                 3\r\n<\/pre>\n<p>Uue veeru saab lisada andmefreimi v\u00e4ga lihtsalt. Lisame hinnetetabelisse juurde bioloogia hinded. Seda saab teha sarnaselt s\u00f5nastikku uue elemendi lisamisega, kus uus v\u00f5ti kirjutati s\u00f5nastiku nime j\u00e4rel nurksulgude vahele ja selle omistati uus v\u00e4\u00e4rtus, nt <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">sonastik['v\u00f5ti'] = 6<\/code>. Andmefreimi puhul saab nii lisada terve veeru, kus andmefreimi nime j\u00e4rel on nurksulgudes uue veeru nimi, millele omistatakse seeria uute v\u00e4\u00e4rtustega.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\n\r\nhinded[\"Bioloogia\"] = pd.Series([4, 5, 3, 5, 5])\r\n\r\nprint(hinded)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia\r\n  0   Malle            4                 4          4\r\n  1   Saara            5                 5          5\r\n  2   Kusti            3                 5          3\r\n  3   Aksel            4                 4          5\r\n  4  Kalmer            5                 3          5\r\n<\/pre>\n<p>Samamoodi saab ka teiste veergude p\u00f5hjal arvutada uue veeru ning lisada selle tabelisse. Arvutame \u00f5pilaste keskmised hinded ja lisame need tabelisse. Keskmise hinde arvutamiseks kasutame funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">mean<\/code>. Samuti \u00fcmardame tulemused kaks kohta p\u00e4rast koma.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nhinded = pd.DataFrame(sonastik)\r\n\r\n# Bioloogia hinnete veeru lisamine\r\nhinded[\"Bioloogia\"] = pd.Series([4, 5, 3, 5, 5])\r\n\r\n# Keskmise hinde veeru lisamine ja \u00fcmardamine kaks kohta p\u00e4rast koma\r\nhinded[\"Keskmine hinne\"] = hinded.mean(axis=1).round(2)\r\n\r\nprint(hinded)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia  Keskmine hinne\r\n  0   Malle            4                 4          4            4.00\r\n  1   Saara            5                 5          5            5.00\r\n  2   Kusti            3                 5          3            3.67\r\n  3   Aksel            4                 4          5            4.33\r\n  4  Kalmer            5                 3          5            4.33\r\n<\/pre>\n<p>J\u00e4rgmisena vaatame olukorda, kus on vaja kaks tabelit omavahel liita. Olgu meil andmefreim, kus on \u00fche teise r\u00fchma \u00f5pilaste hinded.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],\r\n            'Matemaatika': [4, 5, 4, 5],\r\n            'Programmeerimine': [4, 5, 4, 3],\r\n            'Bioloogia': [5, 2, 3, 4]}\r\n\r\nhinded_B = pd.DataFrame(sonastik_B)<\/pre>\n<p>Me soovime need liita varasemalt n\u00e4idetes kasutatud hinnetetabeliga. Andmefreimide \u00fchendamiseks saab kasutada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">concat<\/code>, mille argumendiks on liidetavate tabelite j\u00e4rjend.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">sonastik_A = {'Nimi': ['Malle', 'Saara', 'Kusti', 'Aksel', 'Kalmer'],\r\n            'Matemaatika': [4, 5, 3, 4, 5],\r\n            'Programmeerimine': [4, 5, 5, 4, 3]}\r\n\r\nsonastik_B = {'Nimi': ['Sulev', 'Guido', 'Ada', 'Moona'],\r\n            'Matemaatika': [4, 5, 4, 5],\r\n            'Programmeerimine': [4, 5, 4, 3],\r\n            'Bioloogia': [5, 2, 3, 4]}\r\n\r\nhinded_A = pd.DataFrame(sonastik_A)\r\nhinded_B = pd.DataFrame(sonastik_B)\r\n\r\n# ignore_index=True --&gt; indekseerimist j\u00e4tkatakse ka uute ridadega\r\nhinded = pd.concat([hinded_A, hinded_B], ignore_index=True)\r\nprint(hinded)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n       Nimi  Matemaatika  Programmeerimine  Bioloogia\r\n  0   Malle            4                 4        NaN\r\n  1   Saara            5                 5        NaN\r\n  2   Kusti            3                 5        NaN\r\n  3   Aksel            4                 4        NaN\r\n  4  Kalmer            5                 3        NaN\r\n  5   Sulev            4                 4        5.0\r\n  6   Guido            5                 5        2.0\r\n  7     Ada            4                 4        3.0\r\n  8   Moona            5                 3        4.0\r\n<\/pre>\n<p>Uute andmete lisamiseks andefreimi pakub Pandas veel v\u00f5imalusi, n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">join<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">stack<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">merge<\/code>. Nende kohta v\u00f5id l\u00e4hemalt uurida Pandase <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/index.html\">dokumentatsioonist<\/a>.<\/p>\n","protected":false},"author":16,"menu_order":8,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-684","chapter","type-chapter","status-publish","hentry"],"part":93,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":3,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/684\/revisions"}],"predecessor-version":[{"id":686,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/684\/revisions\/686"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/93"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/684\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=684"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=684"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=684"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}