Pandas DataFrame: Tabellen in Python effizient und strukturiert bearbeiten!
Der pandas DataFrame ist eine Python-Datenstruktur, mit der du Tabellen erstellen und bearbeiten kannst. Wir erklären dir den Aufbau dieser Struktur sowie die wichtigsten Methoden und Eigenschaften.
Wie funktionieren pandas DataFrames?
pandas DataFrames sind das Herzstück der Python-pandas-Bibliothek und ermöglichen eine effiziente und flexible Datenanalyse in Python. Ein pandas DataFrame ist eine zweidimensionale tabellarische Datenstruktur mit nummerierten Zeilen und beschrifteten Spalten. Diese Struktur erlaubt es, Daten leicht verständlich zu organisieren, ähnlich wie in Excel oder LibreOffice. Jede Spalte kann unterschiedliche Python-Datentypen enthalten. Ein DataFrame kann also heterogene Daten speichern – etwa Zahlen, Text und Booleans in einer einzigen Tabelle.
pandas DataFrames basieren auf NumPy-Arrays, was eine schnelle Handhabung von Daten ermöglicht. Allerdings unterscheiden sie sich von NumPy-Strukturen durch ihre Heterogenität und die Dimensionen. Während NumPy ideal für riesige Mengen numerischer Werte ist, eignen sich pandas DataFrames besser für die allgemeine Datenmanipulation.
Aufbau von pandas DataFrames
Ein DataFrame besteht aus drei Kernkomponenten: den Daten, den Zeilenindizes und den Spaltennamen. Der Zeilenindex dient als eindeutige Kennung für jede Zeile. Standardmäßig sind Zeilen numerisch indexiert, du kannst sie aber durch Strings ersetzen. Beachte, dass pandas DataFrames null-indexiert sind, die Indizes beginnen also bei 0.

Obwohl pandas DataFrames extrem nützlich sind, gehören sie nicht zum Standardumfang von Python und müssen extra eingebunden werden. Das erledigst du mit der Zeile import pandas oder from pandas import DataFrame am Anfang deiner Datei. Alternativ nutzt du import pandas as pd, um das Modul mit dem kurzen Namen „pd“ anzusprechen.
Der Umgang mit pandas DataFrames
pandas DataFrames bieten viele Methoden, um Daten effizient zu bearbeiten, zu analysieren und zu visualisieren. Hier lernst du die wichtigsten Konzepte zur Datenmanipulation kennen.
Pandas DataFrame erstellen
Hast du deine Daten bereits in einer Python-Liste oder einem Python-Dictionary, kannst du daraus leicht einen DataFrame erstellen. Übergib die Struktur einfach dem Konstruktor pandas.DataFrame([Daten]). Die Interpretation hängt vom Typ ab. So erstellst du einen DataFrame aus einer Liste:
import pandas
liste = ["Ahmed", "Beatrice", "Candice", "Donovan", "Elisabeth", "Frank"]
df = pandas.DataFrame(liste)
print(df)
# Ausgabe:
# 0
# 0 Ahmed
# 1 Beatrice
# 2 Candice
# 3 Donovan
# 4 Elisabeth
# 5 FrankpythonWie du im Beispiel siehst, entstehen aus einfachen Listen DataFrames mit nur einer einzelnen, unbeschrifteten Spalte. Daher ist es besser, DataFrames aus Dictionaries mit Listen zu erstellen. Dabei werden die Schlüssel zu Spaltennamen und die Listen zu den Daten. Hier ein Beispiel:
import pandas
daten = {
'Name': ['Arthur', 'Bruno', 'Christoph'],
'Alter': [34, 30, 55],
'Gehalt': [75000.0, 60000.5, 90000.3],
}
df = pandas.DataFrame(daten)
print(df)
# Ausgabe:
# Name Alter Gehalt
# 0 Arthur 34 75000.0
# 1 Bruno 30 60000.5
# 2 Christoph 55 90000.3pythonimport pandas
import sqlalchemy
# DataFrame von CSV:
csv = pandas.read_csv("csv-dateien/daten.csv")
# DataFrame von SQL:
engine = create_engine('postgresql://benutzername:passwort@localhost:5432/meine_datenbank')
sql = pandas.read_sql_query('SELECT * FROM tabelle', engine)pythonDie DataFrames csv und sql enthalten nun alle Daten aus der Datei daten.csv bzw. der SQL-Tabelle tabelle. Du kannst beim Import weitere Details festlegen, etwa ob Indizes übernommen werden sollen. Details dazu findest du in der offiziellen pandas-Dokumentation.
Um einen DataFrame aus einer SQL-Tabelle zu laden, kombiniere pandas mit einem Modul wie SQLAlchemy. Baue die Verbindung zur Datenbank auf und übergib sie an read_sql_query().
Pandas DataFrames: Daten anzeigen
Du kannst die ganze Tabelle oder gezielt Zeilen und Spalten ausgeben. Das folgende Beispiel zeigt, wie du einzelne oder mehrere Bereiche selektierst:
# 0-te Zeile ausgeben
print(df.loc[0])
# Zeilen 3 bis 6 ausgeben
print(df.loc[3:6])
# Zeilen 3 und 6 ausgeben
print(df.loc[[3, 6]])
# Spalte „Beruf“ ausgeben
print(df["Beruf"])
# Spalten „Beruf“ und „Alter“ ausgeben
print(df[["Beruf", "Alter"]])
# Auswahl mehrerer Zeilen und Spalten
print(df.loc[[3, 6], ['Beruf', 'Alter']])pythonSpalten sprichst du über ihren Namen in Klammern an, ähnlich wie bei Dictionaries. Für Zeilen nutzt du das Attribut loc. Mit loc kannst du Daten auch nach logischen Bedingungen filtern. Hier werden nur Zeilen ausgegeben, in denen „Alter“ über 30 liegt:
print(df.loc[df['Alter'] > 30])pythonMit dem Attribut iloc wählst du Daten basierend auf ihrer Position aus. So greifst du etwa auf die Zelle in der dritten Zeile und vierten Spalte zu:
print(df.iloc[3, 4])
# Ausgabe:
# Hamburg
print(df.iloc[[3, 4, 6], 4])
# Ausgabe:
# 3 Hamburg
# 4 München
# 6 SaarbrückenpythonPandas DataFrames: Über Zeilen iterieren
Oft musst du jede Zeile einzeln bearbeiten. pandas bietet dafür zwei Methoden: itertuples() und iterrows(). Beide haben Vor- und Nachteile bei Performance und Komfort.
Die Methode iterrows() liefert für jede Zeile ein Tupel aus Index und Series zurück. Eine Series ist ähnlich wie eine Liste, aber performanter. Der Zugriff erfolgt bequem über den Spaltennamen.
Obwohl Series effizient sind, verursachen sie Rechenaufwand. Daher ist itertuples() bei sehr großen DataFrames besser. Im Gegensatz zu iterrows() gibt itertuples() die ganze Zeile inkl. Index als Tupel zurück. Diese sind schneller, und der Zugriff erfolgt per Punkt-Notation, wie bei Objekt-Attributen.
Wichtig: Tupel sind unveränderbar (immutable). Willst du Werte während der Iteration mit itertuples() ändern, musst du den DataFrame über das at-Attribut und den Index referenzieren. Das funktioniert ähnlich wie loc. Hier der Vergleich:
import pandas
df = pandas.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Alter': [25, 30, 35],
'Gehalt': [70000.0, 80000.5, 90000.3]
})
for index, row in df.iterrows():
row['Gehalt'] += 1000
print(f"Index: {index}, Alter: {row['Alter']}, Gehalt: {row['Gehalt']}")
for tup in df.itertuples():
df.at[tup.Index, 'Gehalt'] += 1000 # Wert mittels at[] direkt im DataFrame ändern
print(f"Index: {tup.Index}, Alter: {tup.Alter}, Gehalt: {df.loc[tup.Index, 'Gehalt']}")
# Beide Schleifen haben dieselbe Ausgabepython