Wie man SQL in pandas mit pandasql-Abfragen verwendet

SQL, oder Structured Query Language, ist eine Programmiersprache, die zur Verfügung gestellt wird, um auf, auszulesen, zu verarbeiten und zu erkunden, Daten, die in relationalen Datenbanken gespeichert sind. pandas ist eine auf Python basierende Open-Source-Bibliothek, die speziell für Datenmanipulation und -analyse entwickelt wurde.

In diesem Lehrbuch werden wir diskutieren, wann und wie wir SQL-Funktionen im Rahmen von pandas verwenden können (und wann wir das nicht tun können). Zusätzlich werden wir verschiedene Beispiele für die Implementierung dieses Ansatzes anschauen und die Ergebnisse mit den entsprechenden Code in reinen pandas vergleichen.

Warum SQL in pandas verwenden?

Angesichts der Definitionen aus der Einleitung, warum möchte man SQL in Verbindung mit pandas verwenden, wenn letzteres ein vollständiges Paket für Datenanalyse ist?

Die Antwort ist, dass in bestimmten Fällen, insbesondere für komplexe Programme, SQL-Abfragen viel offener und einfacher lesbar sind als der entsprechende Code in pandas. Dies ist insbesondere dann der Fall, wenn Personen zunächst SQL verwendet haben, um mit Daten zu arbeiten, und später pandas gelernt haben.

Wenn Sie mehr Training in pandas brauchen, können Sie sich unser Data Manipulation with pandas Kurs und Pandas Tutorial: DataFrames in Python anschauen.

To see the readability of SQL in action, lassen Sie uns annehmen, dass wir eine Tabelle (ein DataFrame) namens penguins haben, die verschiedene Informationen über Pinguine enthält (und wir werden später in diesem Tutorial mit solch einer Tabelle arbeiten). Um alle einzigartigen Arten von Pinguinen zu extrahieren, die männlich sind und Flügel länger als 210 mm haben, würden wir den folgenden Code in pandas verwenden:

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

Stattdessen würden wir, um dieselben Informationen mit SQL abzurufen, den folgenden Code ausführen:

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

Der zweite Codeabschnitt, geschrieben in SQL, sieht fast wie ein natürlicher englischer Satz aus und ist daher viel intuitiver. Wir können die Lesbarkeit weiter erhöhen, indem wir ihn über mehrere Zeilen verteilen:

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

Nun, da wir die Vorteile des Einsatzes von SQL für pandas identifiziert haben, lassen Sie uns sehen, wie wir beide Technologien technisch kombinieren können.

Wie man pandasql verwendet

Die pandasql-Python-Bibliothek ermöglicht es, pandas-DataFrames durch Ausführen von SQL-Befehlen abzufragen, ohne sich mit einem SQL-Server zu verbinden. Unter der Haube verwendet es SQLite-Syntax, erkennt automatisch alle pandas-DataFrames und behandelt sie wie normale SQL-Tabellen.

Einrichten Ihrer Umgebung

Zunächst müssen wir pandasql installieren:

pip install pandasql

Dann importieren wir die erforderlichen Pakete:

from pandasql import sqldf import pandas as pd

Der oben genannte sqldf-Aufruf stammt aus der Bibliothek pandasql, die praktisch nur mit dieser Funktion einen sinnvollen Nutzen verspricht. Wie ihre Bezeichnung sagt, wird sie für die Datenbankabfragen via SQL-Syntax verwendet. Neben dieser Funktion beinhaltet pandasql zwei einfache integrierte Datensätze, die mit den selbsterklärenden Funktionen load_births() und load_meat() geladen werden können.

pandasql Syntax

Der Aufbau der sqldf-Funktion ist sehr einfach:

sqldf(query, env=None)

Hier ist query ein erforderliches Argument, das eine SQL-Abfrage als String aufnimmt, und env—ein optionales (und selten nützliches) Argument, das entweder locals() oder globals() sein kann und sqldf die jeweilige Gruppe von Variablen in Ihrem Python-Umfeld zugänglich macht.

Die sqldf-Funktion gibt das Ergebnis einer Abfrage als pandas-Datenframe zurück.

Wann kann man pandasql verwenden?

Die pandasql-Bibliothek ermöglicht die Nutzung von Daten mit dem Datenabfragesprache (DQL), einem der Unterbereiche von SQL. Mit anderen Worten, mit pandasql können wir Abfragen auf Daten in einer Datenbank durchführen, um die erforderlichen Informationen daraus zu extrahieren. Insbesondere können wir Zugriff, Extraktion, Filterung, Sortierung, Gruppierung, Verknüpfung, Aggregierung von Daten und mathematische oder logische Operationen darauf durchführen.

Wann kann man pandasql nicht verwenden?

pandasql erlaubt keinen Einsatz von anderen SQL-Unterbereichen neben DQL. Dies bedeutet, dass wir pandasql nicht dazu verwenden können, Tabellen zu verändern (Update, Truncate, Insert usw.) oder die Daten innerhalb einer Tabelle zu ändern (Update, Löschen, oder Insert).

Da diese Bibliothek auf SQL-Syntax basiert, sollten wir uns der bekannten Eigenarten von SQLite bewusst sein.

Beispiele für die Nutzung von pandasql

Jetzt werden wir uns genauer ansehen, wie man SQL-Abfragen auf pandas-Dataframes mit der sqldf-Funktion von pandasql ausführt. Um Daten zum Üben zu haben, laden wir eines der integrierten Datensätze der seaborn-Bibliothek—penguins:

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

Output:

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 aktualisieren musst, ist unser SQL-Fundamentals-Kenntnispfad ein guter Anhaltspunkt.

Extrahieren von Daten mit pandasql

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

Output:

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

Oben haben wir Informationen über die Arten und die Geographie der ersten fünf Pinguine aus dem penguins-Dataframe extrahiert. Beachte, dass das Ausführen der sqldf-Funktion ein pandas-Dataframe zurückgibt:

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

Output:

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

In reinem pandas wäre es:

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

Output:

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

Ein weiteres Beispiel ist die Extrahierung einzigartiger Werte aus einer Spalte:

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

Output:

species 0 Adelie 1 Chinstrap 2 Gentoo

In pandas wäre es:

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

Output:

['Adelie' 'Chinstrap' 'Gentoo']

Sortieren von Daten mit pandasql

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

Output:

body_mass_g 0 6300.0 1 6050.0 2 6000.0 3 6000.0 4 5950.0

Oben haben wir unsere Pinguine nach Körpergewicht in absteigender Reihenfolge sortiert und die fünf höchsten Werte des Körpergewichts angezeigt.

In pandas, es würde sich so aussehen:

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

Filtern von Daten mit pandasql

Probieren wir das gleiche Beispiel, das wir im Kapitel Warum SQL in pandas verwenden erwähnt haben: Die extrahierung der einzigartigen Arten von Pinguinen, die männlich sind und eine Flügelspannweite von länger als 210 mm haben:

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

Ausgabe:

species 0 Chinstrap 1 Gentoo

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

Der gleiche Code in pandas würde etwas umfangreicher aussehen:

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

Ausgabe:

['Chinstrap' 'Gentoo']

Gruppieren und Aggregieren von Daten mit pandasql

Jetzt, lassen Sie uns Datengruppierung und Aggregation anwenden, um die längste Schnabelgröße für jede Art in der 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 gleiche 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 leicht mathematische oder logische Operationen auf den Daten durchführen. Stellen Sie sich vor, wir möchten den Schnabellängen-Tiefe-Verhältnis für jeden Pinguin berechnen und die fünf höchsten Werte dieser Messung 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

Beachten Sie, dass wir dieses Mal den Alias length_to_depth für die Spalte mit den Verhältniswerten verwendet haben. Andernfalls würden wir eine Spalte mit dem Monstersnamen bill_length_mm / bill_depth_mm erhalten.

In pandas müssten wir zunächst 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

Zusammenfassung

Zum Schluss haben wir in diesem Tutorial beschrieben, warum und wann wir die Funktionalität von SQL für pandas kombinieren können, um bessere und effizientere Code zu schreiben. Wir haben erörtert, wie man die pandasql-Bibliothek für diesen Zweck einrichtet und verwendet und welche Einschränkungen dieses Paket aufweist. Schließlich haben wir eine Reihe von beliebten Beispielen für die praktische Anwendung von pandasql angesprochen und in jedem Fall den Code mit seinem pandas-Gegenstück verglichen.

Nun haben Sie alles, was Sie brauchen, um SQL für pandas in echten Projekten anzuwenden. Ein großartiger Ort für Ihre Praxis ist das DataLab von DataCamp, ein mit AIunterstützung ausgestattetes Datenbuch mit hervorragender SQL-Unterstützung.

Source:
https://www.datacamp.com/tutorial/how-to-use-sql-in-pandas-using-pandasql-queries