Weiter zum Inhalt

So nutzt du SQL in pandas mit pandasql-Abfragen

Entfessle die Kraft von SQL in pandas und lerne, wann und wie du SQL-Abfragen in pandas mit der pandasql-Bibliothek nahtlos einsetzt.
Aktualisiert 18. Sept. 2026  · 8 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

In diesem Tutorial schauen wir uns an, wann und wie wir die SQL-Funktionalität im Rahmen von pandas nutzen können (und wann nicht). Außerdem betrachten wir verschiedene Beispiele für die Umsetzung dieses Ansatzes und vergleichen die Ergebnisse mit gleichwertigem Code in purem pandas.

Warum SQL in pandas verwenden?

Warum sollte man SQL mit pandas kombinieren, wenn pandas bereits ein Komplettpaket für die Datenanalyse ist?

Die Antwort: Gerade bei komplexeren Programmen wirken SQL-Abfragen oft deutlich einfacher und lesbarer als der entsprechende Code in pandas. Das gilt besonders für alle, die zuerst mit SQL gearbeitet und später pandas gelernt haben.

Um die bessere Lesbarkeit von SQL zu verdeutlichen, nehmen wir an, wir haben eine Tabelle (ein DataFrame) namens penguins mit verschiedenen Informationen über Pinguine (mit so einer Tabelle arbeiten wir später im Tutorial). Um alle einzigartigen Arten von männlichen Pinguinen mit einer Flügellänge von mehr als 210 mm zu extrahieren, benötigen wir in pandas folgenden Code:

penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique()

Die gleiche Information erhalten wir in SQL mit folgendem Code:

SELECT DISTINCT species FROM penguins WHERE sex = 'Male' AND flipper_length_mm > 210

Der zweite, in SQL geschriebene Code liest sich fast wie ein natürlicher englischer Satz und ist damit deutlich intuitiver. Wir können die Lesbarkeit weiter erhöhen, indem wir ihn über mehrere Zeilen aufteilen:

SELECT DISTINCT species
  FROM penguins 
 WHERE sex = 'Male' 
   AND flipper_length_mm > 210

Nachdem wir die Vorteile der SQL-Nutzung für pandas identifiziert haben, schauen wir uns an, wie wir beides technisch kombinieren.

So verwendest du pandasql

Die Python-Bibliothek pandasql ermöglicht es, pandas-DataFrames mit SQL-Befehlen abzufragen, ohne eine Verbindung zu einem SQL-Server herstellen zu müssen. Unter der Haube nutzt sie die SQLite-Syntax, erkennt automatisch alle pandas-DataFrames und behandelt sie wie reguläre SQL-Tabellen.

Deine Umgebung einrichten

Zuerst installieren wir pandasql:

pip install pandasql

Dann importieren wir die benötigten Pakete:

from pandasql import sqldf
import pandas as pd

Oben importieren wir direkt die Funktion sqldf() aus pandasql, die praktisch die einzige wirklich relevante Funktion der Bibliothek ist. Wie der Name vermuten lässt, dient sie dazu, DataFrames mit SQL-Syntax abzufragen. Darüber hinaus bringt pandasql zwei einfache integrierte Datensätze mit, die sich über die selbsterklärenden Funktionen load_births() und load_meat() laden lassen.

pandasql-Syntax

Die Syntax der Funktion sqldf() ist sehr einfach:

sqldf(query, env=None)

Hier ist query ein Pflichtparameter, der eine SQL-Abfrage als String entgegennimmt, und env—ein optionaler (und selten nützlicher) Parameter, der entweder locals() oder globals() sein kann und sqldf() Zugriff auf die entsprechenden Variablen in deiner Python-Umgebung gibt.

Die Funktion sqldf() gibt das Abfrageergebnis als pandas-DataFrame zurück.

Wann wir pandasql nutzen können

Die Bibliothek pandasql erlaubt die Arbeit mit Daten über die Data Query Language (DQL), einen Teilbereich von SQL. Mit anderen Worten: Mit pandasql können wir Abfragen auf den in einem DataFrame gespeicherten Daten ausführen, um die benötigten Informationen zu erhalten. Konkret können wir Daten lesen, extrahieren, filtern, sortieren, gruppieren, joinen, aggregieren und mathematische oder logische Operationen ausführen.

Wann wir pandasql nicht nutzen können

pandasql unterstützt keine anderen SQL-Teilmengen außer DQL. Das bedeutet, wir können pandasql nicht verwenden, um Tabellen zu verändern (update, truncate, insert etc.) oder Daten in einer Tabelle zu ändern (update, delete oder insert).

Zusätzlich sollten wir, da diese Bibliothek auf SQL-Syntax basiert, die bekannten Eigenheiten von SQLite im Blick behalten.

Beispiele für die Verwendung von pandasql

Jetzt schauen wir uns im Detail an, wie wir mit der Funktion sqldf() aus pandasql SQL-Abfragen auf pandas-DataFrames ausführen. Damit wir üben können, laden wir einen der integrierten Datensätze der seaborn-Bibliothek—penguins:

import seaborn as sns
penguins = sns.load_dataset('penguins')
print(penguins.head())

Ausgabe:

   species island     bill_length_mm  bill_depth_mm  flipper_length_mm  \
0  Adelie  Torgersen            39.1           18.7              181.0   
1  Adelie  Torgersen            39.5           17.4              186.0   
2  Adelie  Torgersen            40.3           18.0              195.0   
3  Adelie  Torgersen             NaN            NaN                NaN   
4  Adelie  Torgersen            36.7           19.3              193.0   

   body_mass_g     sex  
0       3750.0    Male  
1       3800.0  Female  
2       3250.0  Female  
3          NaN     NaN  
4       3450.0  Female

Wenn du deine SQL-Kenntnisse auffrischen willst, ist unser Skill-Lernpfad SQL Fundamentals ein guter Startpunkt.

Daten mit pandasql extrahieren

print(sqldf('''SELECT species, island 
FROM penguins 
LIMIT 5'''))

Ausgabe:

  species  island
0  Adelie  Torgersen
1  Adelie  Torgersen
2  Adelie  Torgersen
3  Adelie  Torgersen
4  Adelie  Torgersen

Oben haben wir Informationen über Art und Fundort der ersten fünf Pinguine aus dem DataFrame penguins extrahiert. Beachte, dass der Aufruf von sqldf() einen pandas-DataFrame zurückliefert:

print(type(sqldf('''SELECT species, island 
                      FROM penguins 
                     LIMIT 5''')))

Ausgabe:

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

In purem pandas wäre es:

print(penguins[['species', 'island']].head())

Ausgabe:

   species island
0  Adelie  Torgersen
1  Adelie  Torgersen
2  Adelie  Torgersen
3  Adelie  Torgersen
4  Adelie  Torgersen

Ein weiteres Beispiel ist das Extrahieren einzigartiger Werte aus einer Spalte:

print(sqldf('''SELECT DISTINCT species 
                 FROM penguins'''))

Ausgabe:

     species
0     Adelie
1  Chinstrap
2     Gentoo

In pandas wäre es:

print(penguins['species'].unique())

Ausgabe:

['Adelie' 'Chinstrap' 'Gentoo']

Daten mit pandasql sortieren

print(sqldf('''SELECT body_mass_g 
                 FROM penguins 
                ORDER BY body_mass_g DESC 
                LIMIT 5'''))

Ausgabe:

   body_mass_g
0       6300.0
1       6050.0
2       6000.0
3       6000.0
4       5950.0

Hier haben wir die Pinguine nach Körpermasse absteigend sortiert und die fünf höchsten Werte angezeigt.

In pandas wäre es:

print(penguins['body_mass_g'].sort_values(ascending=False, 
ignore_index=True).head())

Ausgabe:

0    6300.0
1    6050.0
2    6000.0
3    6000.0
4    5950.0
Name: body_mass_g, dtype: float64

Daten mit pandasql filtern

Probieren wir dasselbe Beispiel aus dem Kapitel „Warum SQL in pandas verwenden“: die einzigartigen Arten männlicher Pinguine mit einer Flügellänge von mehr als 210 mm extrahieren:

print(sqldf('''SELECT DISTINCT species
                 FROM penguins 
                WHERE sex = 'Male' 
                  AND flipper_length_mm > 210'''))

Ausgabe:

     species
0  Chinstrap
1     Gentoo

Hier haben wir die Daten anhand von zwei Bedingungen gefiltert: sex = 'Male' und flipper_length_mm > 210.

Das gleiche in pandas wirkt etwas sperriger:

print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())

Ausgabe:

['Chinstrap' 'Gentoo']

Daten mit pandasql gruppieren und aggregieren

Jetzt gruppieren und aggregieren wir Daten, um die längste Schnabellänge je Art im DataFrame zu finden:

print(sqldf('''SELECT species, MAX(bill_length_mm)
                 FROM penguins 
                GROUP BY species'''))

Ausgabe:

     species  MAX(bill_length_mm)
0     Adelie                 46.0
1  Chinstrap                 58.0
2     Gentoo                 59.6

Der entsprechende Code in pandas:

print(penguins[['species', 'bill_length_mm']].groupby('species', as_index=False).max())

Ausgabe:

     species  bill_length_mm
0     Adelie            46.0
1  Chinstrap            58.0
2     Gentoo            59.6

Mathematische Operationen mit pandasql durchführen

Mit pandasql können wir problemlos mathematische oder logische Operationen auf den Daten ausführen. Angenommen, wir wollen für jeden Pinguin das Verhältnis von Schnabellänge zu -tiefe berechnen und die fünf höchsten Werte anzeigen:

print(sqldf('''SELECT bill_length_mm / bill_depth_mm AS length_to_depth
                 FROM penguins
                ORDER BY length_to_depth DESC
                LIMIT 5'''))

Ausgabe:

   length_to_depth
0         3.612676
1         3.510490
2         3.505882
3         3.492424
4         3.458599

Beachte, dass wir diesmal den Alias length_to_depth für die Spalte mit den Verhältniswerten verwendet haben. Andernfalls würde die Spalte den wenig lesbaren Namen bill_length_mm / bill_depth_mm tragen.

In pandas müssten wir zuerst eine neue Spalte mit den Verhältniswerten erstellen:

penguins['length_to_depth'] = penguins['bill_length_mm'] / penguins['bill_depth_mm']
print(penguins['length_to_depth'].sort_values(ascending=False, ignore_index=True).head())

Ausgabe:

0    3.612676
1    3.510490
2    3.505882
3    3.492424
4    3.458599
Name: length_to_depth, dtype: float64

Fazit

Zusammenfassend haben wir in diesem Tutorial beleuchtet, warum und wann wir die Funktionalität von SQL für pandas kombinieren können, um besseren, effizienteren Code zu schreiben. Wir haben besprochen, wie man die pandasql-Bibliothek dafür einrichtet und nutzt und welche Einschränkungen dieses Paket hat. Abschließend haben wir zahlreiche gängige Beispiele für den praktischen Einsatz von pandasql betrachtet und den Code jeweils mit der entsprechenden Lösung in pandas verglichen.

Jetzt hast du alles, was du brauchst, um SQL für pandas in realen Projekten einzusetzen. Ein idealer Ort zum Üben ist das DataLab, DataCamps KI-unterstütztes Datennotizbuch mit starker SQL-Unterstützung.

Lass dich für deine Traumrolle als Data Engineer zertifizieren

Unsere Zertifizierungsprogramme helfen dir, dich von anderen abzuheben und potenziellen Arbeitgebern zu beweisen, dass deine Fähigkeiten für den Job geeignet sind.

Hol Dir Deine Zertifizierung
Timeline mobile.png
Themen
SQL
Python

Erweitere deine Kompetenzen

Kurs

Datenbearbeitung in SQL

4 Std.
335K
Lerne, mit komplexen SQL-Abfragen diverse Data-Science-Aufgaben zu lösen und Datensätze für Analysen in PostgreSQL vorzubereiten.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Loop-Schleifen in Python-Tutorial

Lerne, wie du For-Schleifen in Python umsetzt, um eine Sequenz oder die Zeilen und Spalten eines Pandas-DataFrame zu durchlaufen.
Aditya Sharma's photo

Aditya Sharma

5 Min.

Tutorial

Zahlen in Python quadrieren: Grundlagen und fortgeschrittene Methoden

Quadrieren in Python ist einfach: Nutze den eingebauten Operator ** oder setze für vielseitigere Lösungen NumPy, pow(), math.pow(), Bitoperatoren und weitere Funktionen ein.
Allan Ouko's photo

Allan Ouko

11 Min.

Tutorial

Python NaN: 4 Möglichkeiten, um in Python nach fehlenden Werten zu suchen

Schau dir 4 Möglichkeiten an, wie du NaN-Werte in Python mit NumPy und Pandas erkennen kannst. Lerne die wichtigsten Unterschiede zwischen NaN und None kennen, um Daten effizient zu bereinigen und zu analysieren.
Adel Nehme's photo

Adel Nehme

5 Min.

Tutorial

Python Datenstrukturen Tutorial

Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Sejal Jaiswal's photo

Sejal Jaiswal

24 Min.

Tutorial

Python-Arrays

Python-Arrays mit Code-Beispielen. Lerne noch heute, wie du mit Python NumPy Arrays erstellen und ausdrucken kannst!
DataCamp Team's photo

DataCamp Team

3 Min.

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

5 Min.

Mehr AnzeigenMehr Anzeigen