Erste Schritte : CSV-Datei mit Pandas laden

Viele Daten im Netz liegen im CSV-Format vor. CSV-Dateien sind eigentlich Text-Datein (so etwas wie *.txt), die von vielen Systemen wie z.B. Windows, MacOS, Linux usw gelesen werden können. Was in Excel-Dateien die Spalten sind, sind in CSV-Dateien die speziellen Trennzeichen.

Hier ein Beispiel des Corona-Datensatzes vom RKI :

Beispiel einer CSV-Datei

In der ersten Zeile stehen die Spaltenköpfe, inden folgenden Zeilen die Daten. Man kann sehen, dass die einzelnen Spalten mit einem Komma abgetrennt sind. Das ist das Trennzeichen in diesem Fall (es könnte auch ein Semikolon o.ä. sein).

In der CSV-Datei stehen einige Datumsangaben im US-Format - darum kümmern wir uns später.

Zunächst muss man das Pandas Modul in Python laden :


import pandas as pd

Wenn man die URL der CSV-Datei kennt, kann man nun die Datei laden und direkt als Dataframe-Objekt namens df “speichern” :


df = pd.read_csv('https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv')

Wenn man nun df aufruft, sollte der Dataframe angezeigt werden. Standardmäßig geht Pandas vom Trennzeichen , aus. Wenn das in den Daten nicht der Fall sein sollte - man bekommt meist eine komische Fehlermeldung -, dann lässt sich mit sep=";" das passende Trennzeichen bestimmen.

Das müsste dann mit in der Klammer stehen (in diesem Beispiel nehme ich wieder das Komma, damit es keinen Fehler beim Laden gibt) :


df = pd.read_csv('https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv', sep=",")

Man kann aber noch mehr Dinge beim Laden der CSV-Datei bestimmen. Wie hatten ja oben gesehen, dass es einige Datumsspalten gibt. Schon beim Laden der CSV kann man diese als Datumsangaben laden, bzw. sie werden automatisch in das datetime-Format von Pandas konvertiert. Das geht mit parse_dates - und man kann direkt eine Liste an Spalten dort übergeben. Für Python-Anfänger:innen : Eine Liste sieht immer in etwa so aus : ['eins', 'zwei', 'drei']. In der Praxis sieht der Code also so aus :


df = pd.read_csv('https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv', sep="," parse_dates=['Meldedatum', 'Refdatum', 'Datenstand'])

Wer genau hinschaut, sieht im Screenshot der CSV-Datei eine Spalte mit einem fünfstelligen Code :

Das ist der sogenannte AGS - jedem Kreis in Deutschland ist so ein Code zugeordnet. Bei den ersten neun Bundesländern beginnt dieser AGS mit einer führenden 0. Pandas “denkt” aber beim laden der CSV : “Oh, das sieht aus wie eine Zahl, also mache ich eine Zahlenspalte daraus”. Die Spalte enthält den Typ Integer, was zur Folge hat, das die führenden Nullen verschwinden und oft vierstellige AGS bleiben - was nicht so toll ist.

Das kann man verhindern, indem man Pandas schon beim Laden der CSV-Datei sagt, dass diese oder mehrere Spalte(n) nicht als Zahl (Integer), sondern als Text (String) geladen werden sollen. Der Überschitlichkeit halber lege ich dafür in der Zeile davor ein sogenanntes Dictionary an, mit dem ich die Spalten und Typen bestimmen kann :


dtypes = {'IdLandkreis': str, 'IdBundesland': str}
df = pd.read_csv('https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv', parse_dates=['Meldedatum', 'Refdatum', 'Datenstand'], dtype=dtypes)