
Python Pandas 和 SQL 构成了数据分析、机器学习和 ETL 流程的基础。处理大型 DataFrame 并运行复杂的数据库查询需要高效且不牺牲代码清晰度。
在 Pandas 中嵌入 SQL 查询 工作流加速了过滤、聚合和连接,同时保持了 Python 的灵活性和结果一致性。
本指南涵盖了 pandasql 设置和 Pandas 的原生 SQL 方法,介绍了真实的 DataFrame 查询示例,概述了优化的最佳实践 分析工作流程 和报告。
为什么要结合 Python Pandas 和 SQL?
熊猫 是一个专为数据操作和分析而构建的 Python 库。它是对表格数据进行切片、切块和转换的首选工具。 SQL 另一方面,结构化查询语言 (Structured Query Language) 是查询关系数据库的黄金标准 - 例如 MySQL、PostgreSQL、SQLite 等。

这就是为什么将这两者融合会改变游戏规则的原因:
桥梁: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())
你会看到列名, 数据类型以及任何缺失值——对于质量数据分析至关重要。
在 DataFrames 上运行 SQL 查询
十大最昂贵的汽车
蟒蛇
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
""")
各品牌平均价格
蟒蛇
q("""
SELECT brand, ROUND(AVG(price), 2) AS avg_price
FROM car_data
GROUP BY brand
ORDER BY avg_price DESC
""")
2015 年后生产的汽车
蟒蛇
q("""
SELECT *
FROM car_data
WHERE year > 2015
ORDER BY year DESC
""")
各品牌汽车总数
蟒蛇
q("""
SELECT brand, COUNT(*) as total_listed
FROM car_data
GROUP BY brand
ORDER BY total_listed DESC
LIMIT 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
""")
各品牌平均里程和价格
蟒蛇
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
""")
每英里价格
蟒蛇
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
""")
按州可视化数据
您甚至可以使用小部件和 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
蟒蛇
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 的结合不仅仅在于查询,还在于构建更智能的工作流程:
Pandasql 与 Pure Pandas:何时使用什么?
| 特性 | pandasql(SQL) | 纯种熊猫 |
|---|---|---|
| 句法 | SQL(许多人都熟悉) | Python(灵活、强大) |
| 可读性 | 对于复杂查询来说较高 | 可能会变得冗长 |
| 性能 | 处理非常大的数据集时速度较慢 | 更快,针对 Python 进行了优化 |
| 连接/分组 | 非常直观 | 更多代码,但更多选项 |
| 之路 | 非常适合快速分析 | 最适合生产工作流程 |
限制和最佳实践
总结
Python Pandas 和 SQL 的集成使用代表了数据分析师的一项基本能力, AI 工程师和研究专业人员。该方法将关系数据库查询与 Pandas 强大的 DataFrame 操作从而提高效率和代码清晰度。通过利用 pandasql 等工具以及 Pandas 的原生 SQL 集成,团队可以在一个统一的环境中执行探索性数据分析 (EDA)、强大的 ETL 工作流和机器学习管道。
要记住的统计数据:
采用这种双重方法可确保可扩展、可维护的分析流程,并为团队的长期成功做好准备。
想要保留你的 AI 和数据技能敏锐吗?
探索更多关于法学硕士 (LLM)、快速工程、RAG 和 AI 代理工作流程。敬请关注更多指南和实践示例 AI MOJO

