Pandas-Tutorial

So geht Datenanalyse mit Python

16.04.2024
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Mit Pandas können Sie Daten(tabellen) direkt in Python laden, verändern, zusammenführen und sogar visualisieren. Unser Tutorial zeigt Ihnen, wie das funktioniert.
Mit Pandas (und Python) zeigen Sie Excel-Enthusiasten, was Sache ist.
Mit Pandas (und Python) zeigen Sie Excel-Enthusiasten, was Sache ist.
Foto: Cik Bak - shutterstock.com

Geht es darum, mit Daten in Tabellenform zu arbeiten, greifen die meisten Menschen zur Tabellenkalkulation. Das ist per se keine schlechte Wahl: Microsoft Excel und ähnliche Programme sind vertraut und bieten zahlreiche Funktionen, um Daten in Tabellenform zu bearbeiten. Schwierig wird es dann, wenn Sie mehr Kontrolle, Präzision und Leistung brauchen, als Excel und Co. bieten.

In diesem Fall könnte die Open-Source-Bibliothek Pandas für Python genau das Richtige für Sie sein: Sie stattet die Programmiersprache mit neuen Datentypen aus, um Informationen möglichst schnell aus tabellarischen Quellen zu laden und diese (unter anderem) in großem Umfang zu verändern, auszurichten und zusammenzuführen. Die Kombination aus Python und Pandas bietet diverse Funktionen, die mit einer Tabellenkalkulation nicht zur Verfügung stehen.

Sie können damit Ihre Daten-Tasks automatisieren und die Ergebnisse reproduzierbar machen. Anstatt klobige und limitierte Makros zu erstellen, können Sie mit Pandas Daten analysieren, segmentieren und transformieren. Die ausdrucksstarke Natur von Python und das umfassende Ökosystem sorgen dabei dafür, dass Sie noch bessere Ergebnisse erzielen, als mit Pandas alleine.

Pandas-Datensatz erstellen

Pandas ist ein Drittanbieterprojekt und somit nicht Teil der Python-Standardbibliothek. Sie müssen es also in Ihrer Laufzeitumgebung mit dem Befehl pip install pandas installieren. Sobald das geschehen ist, folgt der Import in Python mit:

import pandas

Pandas führt zwei neue Datentypen ein:

  • Series und

  • DataFrame.

Der DataFrame repräsentiert Ihr gesamtes Tabellenblatt beziehungsweise Ihre Daten, während Series eine einzelne Spalte des DataFrame repräsentiert. Sie können sich den Pandas DataFrame auch als ein Wörterbuch oder eine Sammlung von Series-Objekten vorstellen.

Normalerweise arbeiten Sie mit Pandas, indem Sie Daten in einem anderen Format importieren. Ein gängiges tabellarisches Datenformat ist .csv - eine Textdatei mit Werten, die durch Kommas getrennt sind. Für unser Tutorial verwenden wir einen Auszug aus dem Gapminder-Datenset, der von Jennifer Bryan an der University of British Columbia erstellt wurde.

Um mit Pandas loszulegen, gilt es zunächst, die Bibliothek zu importieren. Um Tipparbeit zu sparen, ist es dabei üblich, Pandas mit dem Alias pd zu versehen:

import pandas as pd

Um mit den Beispieldaten im .csv-Format arbeiten zu können, laden wir diese mit der Funktion pd.read_csv als DataFrame:

df = pd.read_csv("./gapminder/inst/extdata/gapminder.tsv", sep='\t')

Mit dem sep-Parameter können wir dabei angeben, dass diese spezielle Datei tabulator- und nicht kommagetrennt ist. Sobald die Daten geladen sind, können Sie deren Formatierung überprüfen, um sicherzustellen, dass sie korrekt eingeladen wurden. Das funktioniert, indem Sie die Methode .head() für den DataFrame verwenden:

print(df.head())

country continent year lifeExp pop gdpPercap

0 Afghanistan Asia 1952 28.801 8425333 779.445314

1 Afghanistan Asia 1957 30.332 9240934 820.853030

2 Afghanistan Asia 1962 31.997 10267083 853.100710

3 Afghanistan Asia 1967 34.020 11537966 836.197138

4 Afghanistan Asia 1972 36.088 13079460 739.981106

DataFrame-Objekte weisen das Attribut shape auf. Das gibt Auskunft über die Anzahl der Zeilen (Rows) und Spalten (Columns) im DataFrame:

print(df.shape)

(1704, 6) # rows, cols

Um die Namen der Spalten selbst aufzulisten, verwenden Sie .columns:

print(df.columns)

Index(['country', 'continent', 'year', 'lifeExp',

'pop', 'gdpPercap'], dtype='object')

DataFrames in Pandas funktionieren ähnlich wie die in anderen Sprachen, beispielsweise Julia und R. Jede Spalte - oder Series - muss vom gleichen Typ sein, während Zeilen gemischte Typen enthalten können. In unserem Beispiel ist die country-Spalte immer ein String und die year-Spalte immer eine ganze Zahl. Das können wir überprüfen, indem wir .dtypes verwenden, um den Datentyp jeder Spalte aufzulisten:

print(df.dtypes)

country object

continent object

year int64

lifeExp float64

pop int64

gdpPercap float64

dtype: object

Für eine noch genauere Aufschlüsselung der Typen innerhalb Ihres DataFrame können Sie .info() nutzen:

df.info() # information is written to console, so no print required

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 1704 entries, 0 to 1703

Data columns (total 6 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 country 1704 non-null object

1 continent 1704 non-null object

2 year 1704 non-null int64

3 lifeExp 1704 non-null float64

4 pop 1704 non-null int64

5 gdpPercap 1704 non-null float64

dtypes: float64(2), int64(2), object(2)

memory usage: 80.0+ KB

Jeder Pandas-Datentyp wird auf einem nativen Python-Pendant abgebildet:

  • object wird wie ein Python str-Type behandelt.

  • int64 wird wie ein int in Python behandelt. Zu beachten ist dabei, dass nicht alle Python-ints in int64-Typen konvertiert werden können. Alles, was größer als (2 ** 63)-1 ist, wird nicht konvertiert.

  • float64 wird wie ein Python-float gehandhabt (nativ 64-Bit).

  • datetime64 wird wie ein datetime.datetime Python-Objekt behandelt. Pandas versucht dabei nicht automatisch, Werte, die wie Datumswerte aussehen, in solche zu konvertieren. Das müssen Sie explizit für spezifische Spalten festlegen.