Python – Pandas, Import, Export, DataFrames und Datenmodellierung

Pandas ist eines der besten Packages in Python um Daten in ein Programm zu laden und auch große Mengen lassen sich mithilfe von Pandas aufbereiten und wieder in z.B. Datenbanken zurückschreiben oder mit weiteren Packages zu visualisieren. In Datenanalyse Projekten kommt man also um Pandas, wenn man mit Python arbeitet, gar nicht vorbei. Deshalb möchte ich mit diesem Beitrag einen Überblick über häufig genutzte Funktionen bieten.

Was ist Pandas jetzt eigentlich? Pandas ist ein Package in Python. Der Fokus liegt auf die Datenaufbereitung und Modellierung von Tabellen. Dabei bietet Pandas umfassende Funktionen um aus verschiedenen Quellen die Daten in dein Analyseprojekt zu laden und auch wieder zu exportieren. Außerdem sind die performanten Modellierungsfunktionen ein großer Pluspunkt, die auch die Arbeit mit großen Datenmengen erlauben. Pandas ist quasi aufgesetzt auf das Package Numpy, welches bereits das Konzept von Arrays einführt. Während in Numpy Arras allerdings nur Daten in einem Array mit dem gleichen Datentyp erlaubt, arbeitet Pandas vor allem mit Dataframes. Diese erlauben auch in einem Dataframe unterschiedliche Datentypen, wie z.B. in der ersten Spalte Integer und in der zweiten Spalte Daten vom Typ String etc.

Grundsätzlich möchte ich nicht alle Parameter und Attribute einer Funktion in diesem Blog erläutern sondern mich von der Seite nähern, dass man in Analyse Projekten immer wieder die gleichen Fragen haben wird und man dabei bestimmte Funktionen nutzen kann. Wie man die konkret nutzen kann und die richtigen Parameter einstellt. Dafür gibt es die sehr guten Dokumentationen von http://pandas.pydata.org. Zur Entwicklung empfehle ich das Jupyter Notebook. Wie man sich eine Python Umgebung mit Jupyter Notebook einrichtet werde ich in einem weiteren Blogbeitrag erläutern. Also die erste Frage ist, wie binde ich Pandas in mein Projekt ein? Um Packages einzubinden nutz am besten die folgende Kommandozeile.

import pandas as pd

nun können wir in unserem Projekt die Funktionen von Pandas nutzen. Eine der ersten Fragen die man sich dann stellt ist: Wie kriege ich meine Daten in mein Projekt importiert? Pandas arbeitet wie Eingangs bereits genannt mit Dataframes. Also erzeugen wir im Prinzip einfach ein Dataframe aus einer Datei ( welche Daten enthält) und speichern dieses Dataframe in einer Variable. Je nach Ursprung der Daten gibt es es verschiedene Funktionen dazu. Im folgenden Codeschnipsel werde ich einige aufzeigen

# Dataframe aus einer Excel Datei erzeugen
df = pd.read_excel()
# Dataframe aus einer CSV Datei erzeugen
df = pd.read_csv()
# Dataframe aus einer SQL DB erzeugen
df = pd.read_sql()
# Dataframe aus JSON Format
df = pd.read_json()

Das sind natürlich nur grundlegende Beispiele. Die Funktionen haben zahlreiche zusätzliche Einstellungsmöglichkeiten um z.B. nur bestimmte Spalten zu importieren etc. Aber für allgemeine Anwendungen kann man mit diesen einfachen Befehlen bereits seine Daten in sein Projekt laden. Dabei werden diese Daten in unserem Beispiel in Variable „df“ gespeichert. Über diese Variable kann nun auf die Daten zugegriffen werden. Aber wie kann ich nun sehen wie meine Daten aufgebaut sind? Klassisch nutze ich dafür zwei unterschiedliche Befehle.

# ersten Einträge in meinem Dataframe anzeigen lassen
df.head()
# "Zufällige" Einträge im Dataframe anzeigen lassen
df.sample()

Wenn die Analyse Produktiv geschaltet werden soll, werden diese Befehle in der Regel nicht benötigt. Allerdings helfen sie bei der Entwicklung der Analyse um einen Überblick zu bekommen. die Funktion .head() zeigt dabei die ersten Einträge im Dataframe an. die Funktion .sample() zeigt zufällige Datensätze an. Wobei auch zufällig bedeutet , dass über eine feste Logik die Datensätze berechnet werden, welche angezeigt werden sollen und es für den Nutzer zufällig aussieht. In den Klammern der Funktionen kann bestimmt werden wieviele Datensätze angezeigt werden soll .head(5) zeigt dabei dei ersten 5 Datensätze an. Wenn nichts in den Klammern steht werden als Default Wert 10 Datensätze angezeigt.

So nun können wir uns Daten in ein Dataframe laden und anzeigen lassen. Jetzt möchte ich noch ein paar Möglichkeiten zeigen um Daten zu manipulieren. Eine Aufgabe eines Datenanalysten ist es fehlerhaft Datensätze zu finden und damit umzugehen. Dabei kann die Funktion .fillna() sehr hilfreich sein. Diese findet alle NULL Werte in dem Dataframe und geht mit diesen je nach Definition um. So können fehlende Werte durch feste Werte ersetzt werden, oder durch die im Dataframe davor oder dahinterliegenden Datensätze ersetzt werden.

# NULL-Werte mit einer 0 ersetzen
df = df.fillna(value=0)
# NULL-Wert mit dem nächsten gültigen Wert füllen
df = df.fillna(method='backfill')

Es kann auch sinnvoll sein einzelne Datensätze ohne Inhalt aus dem Dataframe zu entfernen. Dies kann mit der Funktion .dropna() erfüllt werden.

# alle Zeilen mit Null Werten aus dem Dataframe entfernen
df = df.dropna()

Ein mächtiges Werkzeug ist außerdem die .groupby() Funktion. Diese gruppiert Daten nach einer oder mehreren Spalten. Dabei können die nicht angegebenen Spalten nach verschiedenen Methoden aggregiert werden. So können sie aufsummiert werden, den Durchschnitt abbilden, oder die Anzahl der Werte wiedergeben.

# Daten nach einer Spalte mit dem Namen 'spalte1' aufsummieren
df_group = df.groupby(['spalte1']).sum()
# Anzahl der Datensätze der jeweiligen Gruppen wiedergeben
df_group = df.groupby(['spalte1']).count()
# Durchschnittliche Werte ermitteln und Daten nach 'spalte1' und 'spalte2' gruppieren
df_group = df.groupby(['spalte1', 'spalte2']).mean()

Es gibt noch zahlreiche weitere Möglichkeiten um Daten zu manipulieren. In zukünftigen Blogs möchte ich das gerne an konkreten Daten demonstrieren. Zum Abschluss diesen Artikels möchte ich nur noch kurz zeigen wie man seine Daten wieder in einer Datei speichern kann. Dies ist eigentlich genau so einfach wie Daten aus einer Datei in ein Dataframe zu laden. Mit der Funktion .to_excel() oder to_csv() können Daten einfach gespeichert werden. Dazu einfach nur einen Pfad angeben wo die Daten gespeichert werden sollen. Auch in SQL Datenbanken können Daten so wieder zurück gespielt werden.

# Daten in einer Excel speichern
df.to_excel()
# Daten in einer CSV Datei speichern
df.to_csv()
# Daten in einer SQL DB speichern
df.to_sql()

Ich hoffe der ein oder andere hat ein paar Ansätze für seine ersten Schritte mit Python mitnehmen können. Gerne beantworte ich ganz konkrete Fragen per Mail oder unter dem Artikel.