Python Pandas 與 SQL | 2026年無縫資料分析指南

Python Pandas 與 SQL

Python Pandas 和 SQL 構成了資料分析、機器學習和 ETL 流程的基礎。處理大型 DataFrame 和運行複雜的資料庫查詢需要高效且不犧牲程式碼清晰度。

本指南涵蓋了 pandasql 設定和 Pandas 的原生 SQL 方法,介紹了真實的 DataFrame 查詢範例,概述了最佳化的最佳實踐 分析工作流程 和報告。

為什麼要結合 Python Pandas 和 SQL?

大熊貓 是一個用於資料操作和分析的 Python 函式庫。它是對表格資料進行切片、切塊和轉換的首選工具。 的SQL 另一方面,結構化查詢語言 (Structured Query Language) 是查詢關聯式資料庫的黃金標準 - 例如 MySQL、PostgreSQL、SQLite 等。

為什麼要結合 Python Pandas 和 SQL?

這就是為什麼將這兩者融合會改變遊戲規則的原因:

可讀性: SQL 查詢通常比等效的 Pandas 程式碼更清晰,特別是對於複雜的過濾、分組和連接。
效率: 大多數業務資料都儲存在 SQL 資料庫中。將其直接導入 Pandas 可以減少資料摩擦和資料孤島。
靈活性: 您可以使用 SQL 進行繁重查詢,使用 Pandas 進行進階分析、視覺化和 機器學習.
生產率: 資料科學家和分析師可以堅持使用他們喜歡的語法,無論是 SQL 還是 Python,而無需上下文切換。

橋樑:pandasql 和原生 Pandas SQL 集成

pandasql 可以直接在 Pandas DataFrames 上執行 SQL 查詢,無需 匯出資料,提供單獨的資料庫,或採用額外的 API;使用者只需編寫 SQL 語句,接收結果 DataFrame,然後不間斷地繼續進行。

安裝 pandasql

蟒蛇

pip install pandasql

現在您已準備好像專業人士一樣混合使用 SQL 和 Pandas。

入門:基本用法

我們來看一個簡單的例子。假設你有一個 DataFrame:

蟒蛇

import pandas as pd
import pandasql as psql

data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)

query = "SELECT * FROM df"
result = psql.sqldf(query, locals())
print(result)

這將傳回完整的 DataFrame,就像 df.head() 但使用 SQL 語法。現在您可以像在資料庫中一樣進行篩選、分組和連接。

使用 Pandas 和 SQL 進行真實世界數據分析

讓我們用一個實際的資料集來提升一下。假設你正在分析一個汽車銷售資料集,其中包含如下列: brand, model, year, price, mileage,等等。

載入和探索數據

蟒蛇

import pandas as pd
import pandasql as ps

car_data = pd.read_csv("cars_datasets.csv")
print(car_data.head())

print(car_data.info())
print(car_data.isnull().sum())

您會看到列名稱, 數據類型以及任何缺失值——對於品質數據分析至關重要。

在 DataFrame 上執行 SQL 查詢

1

十大最貴的汽車

蟒蛇

def q(query):
    return ps.sqldf(query, {'car_data': car_data})

q("""
SELECT brand, model, year, price
FROM car_data
ORDER BY price DESC
LIMIT 10
""")
2

各品牌平均價格

蟒蛇

q("""
SELECT brand, ROUND(AVG(price), 2) AS avg_price
FROM car_data
GROUP BY brand
ORDER BY avg_price DESC
""")
3

2015年後生產的汽車

蟒蛇

q("""
SELECT *
FROM car_data
WHERE year > 2015
ORDER BY year DESC
""")
4

各品牌汽車總數

蟒蛇

q("""
SELECT brand, COUNT(*) as total_listed
FROM car_data
GROUP BY brand
ORDER BY total_listed DESC
LIMIT 5
""")
5

按條件分組

蟒蛇

q("""
SELECT condition, ROUND(AVG(price), 2) AS avg_price, COUNT(*) as listings
FROM car_data
GROUP BY condition
ORDER BY avg_price DESC
""")
6

各品牌平均里程及價格

蟒蛇

q("""
SELECT brand,
ROUND(AVG(mileage), 2) AS avg_mileage,
ROUND(AVG(price), 2) AS avg_price,
COUNT(*) AS total_listings
FROM car_data
GROUP BY brand
ORDER BY avg_price DESC
LIMIT 10
""")
7

每英里價格

蟒蛇

q("""
SELECT brand,
ROUND(AVG(price/mileage), 4) AS price_per_mile,
COUNT(*) AS total
FROM car_data
WHERE mileage > 0
GROUP BY brand
ORDER BY price_per_mile DESC
LIMIT 10
""")
8

按州可視化數據

您甚至可以使用小部件和 Plotly 來製作互動式儀表板:

蟒蛇

import plotly.express as px
import ipywidgets as widgets

state_dropdown = widgets.Dropdown(
    options=car_data['state'].unique().tolist(),
    value=car_data['state'].unique()[0],
    description='Select State:',
    layout=widgets.Layout(width='50%')
)

def plot_avg_price_state(state_selected):
    query = f"""
    SELECT brand, AVG(price) AS avg_price
    FROM car_data
    WHERE state = '{state_selected}'
    GROUP BY brand
    ORDER BY avg_price DESC
    """
    result = q(query)
    fig = px.bar(result, x='brand', y='avg_price', color='brand',
                 title=f"Average Car Price in {state_selected}")
    fig.show()

widgets.interact(plot_avg_price_state, state_selected=state_dropdown)

這使得您的分析具有互動性和視覺吸引力——非常適合儀表板或 簡報.

超越 pandasql:原生 Pandas SQL 運算

雖然 pandasql 非常適合快速 SQL 風格的查詢,但 Pandas 也支援直接 SQL 整合以使用實際資料庫(如 SQLite、PostgreSQL、MySQL):

讀_sql():將 SQL 表或查詢讀入 數據框.
to_sql():將 DataFrame 寫入 SQL 表。

範例:讀取和寫入 SQL

蟒蛇

import pandas as pd
import sqlite3

# Connect to SQLite database
conn = sqlite3.connect(":memory:")

# Create a table and insert data
conn.execute("CREATE TABLE Students (id INTEGER, Name TEXT, Marks REAL, Age INTEGER)")
conn.execute("INSERT INTO Students VALUES (1, 'Kiran', 80, 16), (2, 'Priya', 60, 14), (3, 'Naveen', 82, 15)")

# Read from SQL
df = pd.read_sql("SELECT * FROM Students", conn)
print(df)

# Write to SQL
df.to_sql("Students_Copy", conn, if_exists="replace", index=False)

這種方法非常適合 ETL 管道、報告和生產資料工作流程。

進階用例:ETL、機器學習和儀表板

SQL 和 Pandas 的高階用例

結合 SQL 和 Pandas 不僅僅是為了查詢,而是為了建立更聰明的工作流程:

ETL 管道: 使用 SQL 數據提取 並使用 Pandas 進行轉換和加載。
A/B 測試: SQL 檢索實驗資料;Python 執行統計測試並視覺化結果。
機器學習: SQL 取得特徵;Pandas 和 scikit-learn 處理特徵工程和建模。
儀表板: SQL 為資料後端提供支援;Python 和 Plotly 或 Dash 建構互動式前端。

Pandasql 與 Pure Pandas:何時使用什麼?

獨特之處pandasql(SQL)純種熊貓
句法SQL(許多人都熟悉)Python(靈活、強大)
可讀性對於複雜查詢來說較高可能會變得冗長
性能處理非常大的資料集時速度較慢更快,針對 Python 進行了最佳化
連接/分組非常直觀更多程式碼,但更多選項
整合非常適合快速分析最適合生產工作流程
專業建議:
對於海量資料集或生產程式碼,原生 Pandas 或直接 SQL 連線速度更快、更穩定。 Pandasql 可用於探索、原型設計,或當 SQL 更易於閱讀時。

限制和最佳實踐

性能: pandasql 在處理大型 DataFrame 時可能會比較慢 - 考慮直接使用 Pandas 或 SQLAlchemy的 用於舉重。
功能: 一些高級 Pandas 功能在 SQL 中不可用,反之亦然。
複雜: 對於多步驟轉換,連結 Pandas 方法可以更清晰。
可擴展性: 對於大數據,請查看 Polars、Dask 或 Spark DataFrames。

最後的思考

Python Pandas 和 SQL 的整合使用代表了資料分析師的必備能力, AI 工程師和研究專業人員。此方法將關聯式資料庫查詢與 Pandas 強大的 DataFrame 操作,從而提高效率和程式碼清晰度。透過利用 pandasql 等工具以及 Pandas 的原生 SQL 集成,團隊可以在一個統一的環境中執行探索性資料分析 (EDA)、強大的 ETL 工作流程和機器學習管道。

要記住的統計數據:

超過 80% 的資料科學家在日常工作流程中依賴 Pandas。
SQL 仍然是 數據招募資訊.
結合 Python Pandas 和 SQL 可以將分析時間減少高達 50%。

採用這種雙重方法可確保可擴展、可維護的分析流程,並為團隊的長期成功做好準備。

發表評論

您的電子郵件地址將不會被發表。 必填欄位已標記 *

本網站使用Akismet來減少垃圾郵件。 了解您的評論資料是如何處理的。

加入 Aimojo 部落!

每週加入 76,200 多名會員獲取內部提示! 
🎁 **附送可重複使用的潔面墊 獲得我們的 200 美元“AI 註冊即可免費獲得「精通工具包」!

推薦 AI 工具
多格拉

親身經歷 AI 基礎設施零平台費用,數據完全控制。 面向需要速度、合規性和自主性的團隊的開源語音代理。

Crawl4AI

將任何網頁轉換為乾淨的、可用於LLM(法學碩士)的數據 AI 代理商和 RAG 管道 專為大型語言模型建構的開源網路爬蟲。

濃度

為生產級應用提供支援的開源向量資料庫 AI 恢復 RAG 管線和 LLM 記憶體的首選嵌入儲存庫

聊天機器人人工智慧

重新掌控你的生活 AI 無需支付額外費用即可使用工作流程 專為進階使用者打造的、以隱私為先的開源 ChatGPT 使用者介面

星際機器人

部署 AI 無需編寫任何程式碼,即可在任何聊天平台內建立代理程式。 一款開源的機器人框架,可無縫整合到您團隊現有的工作環境中

© 2023 - 2026 版權所有 | 成為 AI 專業版 | 用心打造