在 Pandas 中執行 SQL 查詢

Fariba Laiq 2023年10月10日
  1. 在 Python 中使用 pandasql 執行 SQL 查詢
  2. 在 Python 中使用 DuckDB 執行 SQL 查詢
  3. 在 Python 中使用 Fugue 執行 SQL 查詢
在 Pandas 中執行 SQL 查詢

SQL 代表結構化查詢語言;它是一種用於與關聯式資料庫互動的著名語言。在 Python 中執行 SQL 查詢有很多方法。

在 Python 中使用 pandasql 執行 SQL 查詢

這個包有一個類似 R 中的 sqldfsqldf 方法。pandasql 提供了一種更熟悉的方式來對 DataFrame 執行 CRUD 操作。

在我們使用 pandasql 之前,我們必須先使用以下命令安裝它。

#Python 3.x
pip install -U pandasql

我們將從 pandasql 模組匯入 sqldf 方法來執行查詢。然後我們將呼叫帶有兩個引數的 sqldf 方法。

第一個引數是字串格式的 SQL 查詢。第二個引數是一組會話/環境變數(globals()locals())。

在以下程式碼中,首先,我們將 Student.csv 資料上傳到 Jupyter 筆記本的當前工作目錄。然後我們在 DataFrame 上使用傳統的 SQL Select 查詢讀取了學生的記錄;它將顯示 DataFrame 中的所有記錄。

# Python 3.x
import pandas as pd
from pandasql import sqldf


def mysql(q):
    return sqldf(q, globals())


df = pd.read_csv("Student.csv")
mysql("SELECT * FROM df")

輸出:

SQL 選擇查詢

我們在 SQL 查詢中使用了 WHERE 子句,僅顯示滿足以下程式碼中給定條件的選定記錄。

# Python 3.x
import pandas as pd
from pandasql import sqldf


def mysql(q):
    return sqldf(q, globals())


df = pd.read_csv("Student.csv")
mysql("SELECT * FROM df WHERE Department = 'SE'")

輸出:

SQL Where 子句

在 Python 中使用 DuckDB 執行 SQL 查詢

DuckDB 是一個 Python API 和一個使用 SQL 查詢與資料庫互動的資料庫管理系統。

要使用 DuckDB,我們應該首先使用以下命令安裝它。

#Python 3.x
pip install duckdb

在下面的程式碼中,我們匯入了 duckdb 和 Pandas 包,讀取 CSV 檔案並通過使用 duckdb 呼叫 query() 方法來執行查詢。我們將查詢(作為引數)傳遞給 query() 方法。

程式碼將結果作為 DataFrame 返回。我們可以根據 DataFrame 編寫我們選擇的任何 SQL 查詢。

# Python 3.x
import pandas as pd
import duckdb

df = pd.read_csv("Student.csv")
duckdb.query("SELECT * FROM df").df()

輸出:

SQL 選擇查詢

在 Python 中使用 Fugue 執行 SQL 查詢

Fugue 是分散式計算的統一介面,允許使用者在 Spark 和 Dask 上執行 Python、Pandas 和 SQL 程式碼而無需重寫。

我們必須先使用以下命令安裝它才能使用 fugue

#Python 3.x
pip install fugue[sql]

我們在以下程式碼中匯入了 Pandas 和 fugue 包,並使用 CSV 檔案載入了 DataFrame。然後我們將我們的 SQL 查詢傳遞給 fsql() 方法並使用它呼叫 run() 方法。

# Python 3.x
import pandas as pd
from fugue_sql import fsql

df = pd.read_csv("Student.csv")
query = "SELECT * FROM df PRINT"
fsql(query).run()

輸出:

Fugue SQL

作者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn