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
undDataFrame
.
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 Pythonstr
-Type behandelt.int64
wird wie einint
in Python behandelt. Zu beachten ist dabei, dass nicht alle Python-int
s inint64
-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 eindatetime.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.