From f24b8cdac967f340bb9eab0dac598a2de8ada396 Mon Sep 17 00:00:00 2001
From: cmalzer <claudia.malzer@geo.uni-goettingen.de>
Date: Sun, 8 Sep 2019 22:12:59 +0200
Subject: [PATCH] update

---
 ...en 1 - if-Anweisungen und Vergleiche.ipynb |  14 +-
 ... 2 - Schleifen, Listen, Dictionaries.ipynb |   8 +-
 .../Grundlagen 4 - Pandas DataFrames.ipynb    | 150 ++++++++++++------
 3 files changed, 109 insertions(+), 63 deletions(-)

diff --git a/Tutorials/Grundlagen 1 - if-Anweisungen und Vergleiche.ipynb b/Tutorials/Grundlagen 1 - if-Anweisungen und Vergleiche.ipynb
index b0c636d..dc04b3d 100644
--- a/Tutorials/Grundlagen 1 - if-Anweisungen und Vergleiche.ipynb	
+++ b/Tutorials/Grundlagen 1 - if-Anweisungen und Vergleiche.ipynb	
@@ -16,7 +16,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [
     {
@@ -43,7 +43,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
@@ -71,7 +71,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
@@ -98,12 +98,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Im vorigen Beispiel wurde außerdem ein doppeltes Istgleich-Zeichen verwendet. Dieses braucht man, um zwei Werte miteinander zu vergleichen. Nicht zu verwechseln mit dem einzelnen Istgleich-Zeichen, mit dem man einer Variablen einen Wert zuweist!"
+    "Im vorigen Beispiel wurde außerdem ein doppeltes Istgleich-Zeichen verwendet. Dieses braucht man, um zwei Werte miteinander zu vergleichen. Nicht zu verwechseln mit dem einzelnen Istgleich-Zeichen, mit dem man einer Variablen einen Wert zuweist! Hier noch zwei Beispiele:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
@@ -123,7 +123,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
@@ -150,7 +150,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
diff --git a/Tutorials/Grundlagen 2 - Schleifen, Listen, Dictionaries.ipynb b/Tutorials/Grundlagen 2 - Schleifen, Listen, Dictionaries.ipynb
index 12652f0..100e18a 100644
--- a/Tutorials/Grundlagen 2 - Schleifen, Listen, Dictionaries.ipynb	
+++ b/Tutorials/Grundlagen 2 - Schleifen, Listen, Dictionaries.ipynb	
@@ -108,7 +108,7 @@
    "source": [
     "Allerdings ist die Version oben deutlich bequemer zu schreiben.\n",
     "\n",
-    "Wie an diesem Beispiel auch zu erkennen ist, greift man auf ein Element an einer bestimmmten Stelle in der Liste mithilfe eckiger Klammern und dem entsprechenden Index zu:"
+    "Wie an diesem Beispiel auch zu erkennen ist, greift man auf ein Element an einer bestimmten Stelle in der Liste mithilfe eckiger Klammern und dem entsprechenden Index zu:"
    ]
   },
   {
@@ -132,7 +132,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Warum wird hier nicht \"apfel\" ausgegeben, obwohl wir das 1. Element angegeben haben? \n",
+    "Warum wird hier nicht \"Apfel\" ausgegeben, obwohl wir das 1. Element angegeben haben? \n",
     "Das liegt daran, dass in der Programmierung immer von 0 an gerechnet wird. Das erste Element einer Liste ist also Element 0:"
    ]
   },
@@ -218,7 +218,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [
     {
@@ -230,7 +230,7 @@
     }
    ],
    "source": [
-    "vorrat = {\"Apfel\": 4, \"Banane\": 3, \"Weintraube\": 24} #geschweiften Klammern und Anführungszeichen beachten!\n",
+    "vorrat = {\"Apfel\": 4, \"Banane\": 3, \"Weintraube\": 24} #geschweifte Klammern und Anführungszeichen beachten!\n",
     "anzahl_apfel = vorrat[\"Apfel\"]  #greife auf den Wert (value) des Schlüssels (key) \"Apfel\" zu\n",
     "print(\"Es sind noch \"+ str(anzahl_apfel) + \" Äpfel verfügbar.\")\n"
    ]
diff --git a/Tutorials/Grundlagen 4 - Pandas DataFrames.ipynb b/Tutorials/Grundlagen 4 - Pandas DataFrames.ipynb
index 34aa35f..a77c16d 100644
--- a/Tutorials/Grundlagen 4 - Pandas DataFrames.ipynb	
+++ b/Tutorials/Grundlagen 4 - Pandas DataFrames.ipynb	
@@ -13,12 +13,12 @@
    "source": [
     "Die zuvor verwendeten Listen und Dictionaries sind interner Teil von Python und können ohne weiteres sofort verwendet werden. Wie bereits erwähnt gibt es aber auch Module von externen Code-Bibliotheken, die noch viele weitere Funktionalitäten anbieten. Die numpy-Funktionen zur Generierung von Zufallszahlen sind ein Beispiel dafür. Ein weiteres sind <b>DataFrames</b> aus der Python-Bibliothek <b>Pandas</b>. Bei einem DataFrame handelt es sich um eine spezielle Datenstruktur, die mit einer Tabelle vergleichbar ist. In der Handhabung ähneln DataFrames zudem den bereits behandelten Dictionaries.\n",
     "\n",
-    "Grundsätzlich gilt: Die Online-Dokumentation der entsprechenden Bibliothek gibt detailliert Auskunft darüber, wie die Syntax der angebotenen Komponenten aussehen muss, welche Funktionen angeboten werden, etc. In unserem Fall schaut man also im Zweifel unter https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html nach."
+    "Grundsätzlich gilt: Die Online-Dokumentation der entsprechenden Bibliothek gibt detailliert Auskunft darüber, wie die Syntax der angebotenen Komponenten aussehen muss, welche Funktionen zur Verfügung stehen, etc. In unserem Fall schaut man also im Zweifel unter https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html nach."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 76,
+   "execution_count": 96,
    "metadata": {},
    "outputs": [
     {
@@ -46,7 +46,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 77,
+   "execution_count": 97,
    "metadata": {},
    "outputs": [
     {
@@ -75,12 +75,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "<b>NaN</b> steht für \"Not a Number\" und weist darauf hin, dass die Tabelle noch keine gültigen Daten enthält. Es gibt übrigens viele verschiedene Möglichkeiten, ein DataFrame anzulegen und mit Werten zu füllen. Hier ein Beispiel mit einem Dictionary, dessen Keys die Spaltennamen und deren Values die Spaltenwerte angeben. Das 0 und 1 am linken Rand ist ein namenloser Zeilen-Index, der von 0 aufwärts gezählt wird."
+    "<b>NaN</b> steht für \"Not a Number\" und weist darauf hin, dass die Tabelle noch keine gültigen Daten enthält. Es gibt übrigens viele verschiedene Möglichkeiten, ein DataFrame anzulegen und mit Werten zu füllen. Hier ein Beispiel mit einem Dictionary, dessen Keys die Spaltennamen und dessen Values die Spaltenwerte angeben. Das 0 und 1 am linken Rand ist ein namenloser Zeilen-Index, der von 0 aufwärts gezählt wird."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 78,
+   "execution_count": 98,
    "metadata": {},
    "outputs": [
     {
@@ -108,7 +108,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 79,
+   "execution_count": 99,
    "metadata": {},
    "outputs": [
     {
@@ -136,7 +136,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 80,
+   "execution_count": 100,
    "metadata": {},
    "outputs": [
     {
@@ -166,7 +166,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 81,
+   "execution_count": 101,
    "metadata": {
     "scrolled": true
    },
@@ -221,7 +221,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 82,
+   "execution_count": 102,
    "metadata": {},
    "outputs": [
     {
@@ -239,7 +239,7 @@
     }
    ],
    "source": [
-    "query = aerzte[\"Adresse\"] == \"Heegbarg 16\" #die eigentliche Abfrage (sie gibt einen 'True' oder 'False'-Wert zurück)\n",
+    "query = aerzte[\"Adresse\"] == \"Heegbarg 16\" #die eigentliche Abfrage (sie gibt als Wert 'True' oder 'False' zurück)\n",
     "aerzte_heegbarg = aerzte[query] #oder alles in einer Zeile: aerzte[aerzte[\"Adresse\"] == \"Heegbarg 16\"]\n",
     "print(aerzte_heegbarg)"
    ]
@@ -255,7 +255,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 83,
+   "execution_count": 103,
    "metadata": {},
    "outputs": [
     {
@@ -282,7 +282,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 84,
+   "execution_count": 104,
    "metadata": {},
    "outputs": [
     {
@@ -308,12 +308,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Tatsächlich wird PLZ als Ganzzahl gespeichert. Das erklärt, wieso unsere Abfrage mit den String-Anführungszeichen nicht funktioniert hat. Richtig wäre es so:"
+    "Tatsächlich wird PLZ als Ganzzahl (int) gespeichert. Das erklärt, wieso unsere Abfrage mit den String-Anführungszeichen nicht funktioniert hat. Richtig wäre es so:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 85,
+   "execution_count": 105,
    "metadata": {},
    "outputs": [
     {
@@ -342,7 +342,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 86,
+   "execution_count": 106,
    "metadata": {},
    "outputs": [
     {
@@ -366,12 +366,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Bei Bedarf könnten wir sogar den Datentyp der kompletten Spalte ändern:"
+    "Bei Bedarf könnten wir mit <b>astype()</b> sogar den Datentyp der kompletten Spalte ändern:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 87,
+   "execution_count": 107,
    "metadata": {},
    "outputs": [
     {
@@ -398,12 +398,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Haben wir unsere Tabelle als Excel-Datei vorliegen, gehen wir wie folgt vor:"
+    "Haben wir unsere Tabelle als Excel-Datei vorliegen, gehen wir zum Einlesen wie folgt vor:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 88,
+   "execution_count": 108,
    "metadata": {
     "scrolled": true
    },
@@ -444,7 +444,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 89,
+   "execution_count": 109,
    "metadata": {},
    "outputs": [
     {
@@ -477,12 +477,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Warum hat die Umbennung nicht funktioniert? Ganz einfach, die DataFrame-Funktion <b>rename()</b> nimmt eine Änderung vor und liefert als Ergebnis einen neuen, geänderten DataFrame zurück, aber diesen haben wir in keiner Variable gespeichert. Die Änderung hat somit keine Auswirkung. Folgendes funktioniert aber:"
+    "Warum hat die Umbennung nicht funktioniert? Ganz einfach, die DataFrame-Funktion <b>rename()</b> liefert als Ergebnis einen neuen, geänderten DataFrame zurück. Wir haben das Ergebnis aber gar nicht verwendet, sondern uns nur unseren ursprünglichen DataFrame wieder ausgeben lassen. Die Änderung ist demnach nicht zu sehen. Stattdessen sollten wir das Ergebnis entweder in einer neuen Variable speichern und mit dieser weiterarbeiten, oder unsere bisherige Variable <i>df</i> überschreiben:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 90,
+   "execution_count": 110,
    "metadata": {},
    "outputs": [
     {
@@ -514,41 +514,78 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Achtung: Alle vorgenommenen Änderungen werden verloren gehen, sobald wir unser Programm beenden! Um die Tabelle dauerhaft zu speichern, sollte man sie am Ende also nochmal explizit als Datei exportieren (z.B. mit <b>to_csv()</b>). Im Folgenden speichern wir nur die ersten fünf Zeilen unserer Tabelle in einer neuen Datei namens <b>Selektion</b>."
+    "Achtung: All diese Änderungen werden verloren gehen, sobald wir unser Programm beenden! Um die Tabelle dauerhaft zu speichern, sollte man sie am Ende also nochmal explizit als Datei exportieren (z.B. mit <b>to_csv()</b>). Im Folgenden speichern wir nur die ersten fünf Zeilen unserer Tabelle in einer neuen Datei namens <b>Selektion</b>. Nebenbei geben wir an, dass wir in der CSV-Datei <b>keine</b> neue Spalte mit einem Index (von 0 aufwärts) anlegen wollen. Ohne den Parameter <i>index=False</i> würde sonst nämlich automatisch eine erstellt werden. "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 91,
+   "execution_count": 111,
    "metadata": {},
    "outputs": [],
    "source": [
     "df = df.head()\n",
-    "df.to_csv(\"../Daten/Selektion.csv\")"
+    "df.to_csv(\"../Daten/Selektion.csv\", index=False)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Ähnlich wie beim Anlegen der \"Bundesland\"-Spalte kann man auch Spalten anlegen, die das Ergebnis einer mathematischen Berechnung zwischen anderen Spalten sind - vorausgesetzt, sie sind als Zahlenformat gespeichert. Um das auszuprobieren, legen wir eine neue Spalte names <b>berechnung </b> an, die das Ergebnis der Division der Werte in der Spalte \"ID\" durch die Werte in der Spalte \"PLZ\" beinhaltet. Diese Berechnung ergibt keinerlei Sinn, soll aber auch nur das Prinzip verdeutlichen."
+    "Um zu überprüfen, ob das geklappt hat, laden wir sie direkt wieder mit <b>read_csv()</b>:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 92,
+   "execution_count": 112,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "    ID                 Fachgebiet                  Adresse    PLZ Privatarzt  \\\n",
-      "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607        NaN   \n",
-      "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354        NaN   \n",
-      "2  102  Hals-Nasen-Ohrenheilkunde    Möllner Landstr. 26 a  22111        NaN   \n",
-      "3  125  Hals-Nasen-Ohrenheilkunde  Wandsbeker Marktstr. 73  22041        NaN   \n",
-      "4  148  Hals-Nasen-Ohrenheilkunde                  Sand 35  21073        NaN   \n",
+      "    ID                 Fachgebiet                  Adresse    PLZ  Privatarzt  \\\n",
+      "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607         NaN   \n",
+      "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354         NaN   \n",
+      "2  102  Hals-Nasen-Ohrenheilkunde    Möllner Landstr. 26 a  22111         NaN   \n",
+      "3  125  Hals-Nasen-Ohrenheilkunde  Wandsbeker Marktstr. 73  22041         NaN   \n",
+      "4  148  Hals-Nasen-Ohrenheilkunde                  Sand 35  21073         NaN   \n",
+      "\n",
+      "     Stadt     Land Bundesland  \n",
+      "0  Hamburg  Germany    Hamburg  \n",
+      "1  Hamburg  Germany    Hamburg  \n",
+      "2  Hamburg  Germany    Hamburg  \n",
+      "3  Hamburg  Germany    Hamburg  \n",
+      "4  Hamburg  Germany    Hamburg  \n"
+     ]
+    }
+   ],
+   "source": [
+    "df = pd.DataFrame(pd.read_csv(\"../Daten/Selektion.csv\"))\n",
+    "print(df)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Ähnlich wie beim Anlegen der \"Bundesland\"-Spalte kann man übrigens auch Spalten anlegen, die das Ergebnis einer mathematischen Berechnung zwischen anderen Spalten sind - vorausgesetzt, sie sind als Zahlenformat gespeichert. Um das auszuprobieren, legen wir eine neue Spalte names <b>berechnung </b> an, die das Ergebnis der Division der Werte in der Spalte \"ID\" durch die Werte in der Spalte \"PLZ\" beinhaltet. Diese Berechnung ergibt keinerlei Sinn, soll aber auch nur das Prinzip verdeutlichen."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 113,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "    ID                 Fachgebiet                  Adresse    PLZ  Privatarzt  \\\n",
+      "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607         NaN   \n",
+      "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354         NaN   \n",
+      "2  102  Hals-Nasen-Ohrenheilkunde    Möllner Landstr. 26 a  22111         NaN   \n",
+      "3  125  Hals-Nasen-Ohrenheilkunde  Wandsbeker Marktstr. 73  22041         NaN   \n",
+      "4  148  Hals-Nasen-Ohrenheilkunde                  Sand 35  21073         NaN   \n",
       "\n",
       "     Stadt     Land Bundesland  berechnung  \n",
       "0  Hamburg  Germany    Hamburg    0.000088  \n",
@@ -575,19 +612,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 93,
+   "execution_count": 114,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "    ID                 Fachgebiet                  Adresse    PLZ Privatarzt  \\\n",
-      "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607        NaN   \n",
-      "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354        NaN   \n",
-      "2  102  Hals-Nasen-Ohrenheilkunde    Möllner Landstr. 26 a  22111        NaN   \n",
-      "3  125  Hals-Nasen-Ohrenheilkunde  Wandsbeker Marktstr. 73  22041        NaN   \n",
-      "4  148  Hals-Nasen-Ohrenheilkunde                  Sand 35  21073        NaN   \n",
+      "    ID                 Fachgebiet                  Adresse    PLZ  Privatarzt  \\\n",
+      "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607         NaN   \n",
+      "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354         NaN   \n",
+      "2  102  Hals-Nasen-Ohrenheilkunde    Möllner Landstr. 26 a  22111         NaN   \n",
+      "3  125  Hals-Nasen-Ohrenheilkunde  Wandsbeker Marktstr. 73  22041         NaN   \n",
+      "4  148  Hals-Nasen-Ohrenheilkunde                  Sand 35  21073         NaN   \n",
       "\n",
       "     Stadt     Land Bundesland  \n",
       "0  Hamburg  Germany    Hamburg  \n",
@@ -607,21 +644,21 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Es gibt auch Fälle, da wollen wir eine neue Spalte anlegen, die in etwas komplexerer Abhängigkeit zu einer anderen Spalte steht, oder wir wollen bestehende Werte in Abhängigkeit von verschiedenen anderen Informationen überschreiben. So etwas kann bei DataFrames schnell eine relativ komplizierte und unintutive Syntax erfordern.\n",
+    "Es gibt auch Fälle, da wollen wir eine neue Spalte anlegen, die in etwas komplexerer Abhängigkeit zu einer anderen Spalte steht, oder wir wollen bestehende Werte in Abhängigkeit von verschiedenen anderen Informationen aktualisieren. So etwas kann bei DataFrames schnell eine relativ komplizierte und unintutive Syntax erfordern.\n",
     "\n",
     "Um das zu umgehen, können wir aber auch einfach unser bestehendes Wissen über Schleifen, Listen und Dictionaries nutzen. Wir legen zunächst eine leere Liste an, iterieren dann durch das DataFrame und legen für jede Zeile ein neues Dictionary mit den gewünschten Zeilen-Werten an. Entweder erstellt man das Dictionary komplett neu, oder man nutzt die bereits vorhandenen Zeilenwerte und ergänzt diese nur. Danach fügt man das Dictionary der Liste hinzu und am Ende erstellt man aus dieser Liste ein neues DataFrame. Der folgende Codeausschnitt verdeutlicht, wie man durch ein DataFrame iteriert:"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 94,
+   "execution_count": 115,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0\n",
+      "Index: 0\n",
       "ID                                    2\n",
       "Fachgebiet    Hals-Nasen-Ohrenheilkunde\n",
       "Adresse                     Waitzstr. 7\n",
@@ -632,7 +669,7 @@
       "Bundesland                      Hamburg\n",
       "Name: 0, dtype: object\n",
       "<class 'pandas.core.series.Series'>\n",
-      "1\n",
+      "Index: 1\n",
       "ID                                   52\n",
       "Fachgebiet    Hals-Nasen-Ohrenheilkunde\n",
       "Adresse                   Neuer Wall 43\n",
@@ -643,7 +680,7 @@
       "Bundesland                      Hamburg\n",
       "Name: 1, dtype: object\n",
       "<class 'pandas.core.series.Series'>\n",
-      "2\n",
+      "Index: 2\n",
       "ID                                  102\n",
       "Fachgebiet    Hals-Nasen-Ohrenheilkunde\n",
       "Adresse           Möllner Landstr. 26 a\n",
@@ -654,7 +691,7 @@
       "Bundesland                      Hamburg\n",
       "Name: 2, dtype: object\n",
       "<class 'pandas.core.series.Series'>\n",
-      "3\n",
+      "Index: 3\n",
       "ID                                  125\n",
       "Fachgebiet    Hals-Nasen-Ohrenheilkunde\n",
       "Adresse         Wandsbeker Marktstr. 73\n",
@@ -665,7 +702,7 @@
       "Bundesland                      Hamburg\n",
       "Name: 3, dtype: object\n",
       "<class 'pandas.core.series.Series'>\n",
-      "4\n",
+      "Index: 4\n",
       "ID                                  148\n",
       "Fachgebiet    Hals-Nasen-Ohrenheilkunde\n",
       "Adresse                         Sand 35\n",
@@ -681,7 +718,7 @@
    ],
    "source": [
     "for index, data in df.iterrows(): # Syntax, um durch die Zeilen (Rows = Reihen = Zeilen) eines DataFrame zu iterieren\n",
-    "    print(index)  #Index der aktuellen Zeile\n",
+    "    print(\"Index: \" + str(index))  #Index der aktuellen Zeile\n",
     "    print(data)  #Daten in dieser Zeile\n",
     "    print(type(data))  "
    ]
@@ -695,7 +732,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 95,
+   "execution_count": 116,
    "metadata": {},
    "outputs": [
     {
@@ -724,7 +761,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 96,
+   "execution_count": 117,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -744,7 +781,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 98,
+   "execution_count": 118,
    "metadata": {},
    "outputs": [
     {
@@ -753,6 +790,7 @@
      "text": [
       "[{'ID': 2, 'Fachgebiet': 'Hals-Nasen-Ohrenheilkunde', 'Adresse': 'Waitzstr. 7', 'PLZ': 22607, 'Privatarzt': nan, 'Stadt': 'Hamburg', 'Land': 'Germany', 'Bundesland': 'Hamburg', 'Stadtteil': 'Othmarschen'}, {'ID': 52, 'Fachgebiet': 'Hals-Nasen-Ohrenheilkunde', 'Adresse': 'Neuer Wall 43', 'PLZ': 20354, 'Privatarzt': nan, 'Stadt': 'Hamburg', 'Land': 'Germany', 'Bundesland': 'Hamburg', 'Stadtteil': 'Neustadt'}, {'ID': 102, 'Fachgebiet': 'Hals-Nasen-Ohrenheilkunde', 'Adresse': 'Möllner Landstr. 26 a', 'PLZ': 22111, 'Privatarzt': nan, 'Stadt': 'Hamburg', 'Land': 'Germany', 'Bundesland': 'Hamburg', 'Stadtteil': 'Unbekannt'}, {'ID': 125, 'Fachgebiet': 'Hals-Nasen-Ohrenheilkunde', 'Adresse': 'Wandsbeker Marktstr. 73', 'PLZ': 22041, 'Privatarzt': nan, 'Stadt': 'Hamburg', 'Land': 'Germany', 'Bundesland': 'Hamburg', 'Stadtteil': 'Unbekannt'}, {'ID': 148, 'Fachgebiet': 'Hals-Nasen-Ohrenheilkunde', 'Adresse': 'Sand 35', 'PLZ': 21073, 'Privatarzt': nan, 'Stadt': 'Hamburg', 'Land': 'Germany', 'Bundesland': 'Hamburg', 'Stadtteil': 'Harburg'}]\n",
       ".................................................................\n",
+      "DataFrame erstellt aus dieser Liste an Dictionaries:\n",
       "    ID                 Fachgebiet                  Adresse    PLZ  Privatarzt  \\\n",
       "0    2  Hals-Nasen-Ohrenheilkunde              Waitzstr. 7  22607         NaN   \n",
       "1   52  Hals-Nasen-Ohrenheilkunde            Neuer Wall 43  20354         NaN   \n",
@@ -779,8 +817,9 @@
     "        zeile[\"Stadtteil\"] = \"Unbekannt\"\n",
     "    liste_mit_zeilen.append(zeile)\n",
     "print(liste_mit_zeilen) #Die Liste ist nun mit Zeilen in Form von Dictionaries gefüllt!\n",
-    "df = pd.DataFrame(liste_mit_zeilen) #aus einer Liste mit Dictionaries können wir wieder ein DataFrame basteln!\n",
     "print(\".................................................................\")\n",
+    "print(\"DataFrame erstellt aus dieser Liste an Dictionaries:\")\n",
+    "df = pd.DataFrame(liste_mit_zeilen) #aus der Liste mit Dictionaries können wir wieder ein DataFrame basteln!\n",
     "print(df)"
    ]
   },
@@ -790,6 +829,13 @@
    "source": [
     "Wichtig: Hätten wir versucht, während des Schleifendurchlaufs Teile der \"data\"-Series und damit des DataFrames direkt zu verändern, anstatt nur Informationen zu extrahieren und in einer neuen Liste zu speichern, so hätte das keine Auswirkungen auf das DataFrame gehabt. Mit anderen Worten, ein DataFrame kann während des Durchiterierens nicht auf diese Weise verändert werden. Es gibt zwar noch diverse andere Möglichkeiten zum Manipulieren von DataFrames, aber wie bereits erwähnt erfordern diese meist das Wissen um spezielle Syntax."
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<b>Sie haben jetzt das benötigte Wissen, um mit der Aufgabe im Aufgabenordner zu starten!</b>"
+   ]
   }
  ],
  "metadata": {
-- 
GitLab