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())

你会看到列名, 数据类型以及任何缺失值——对于质量数据分析至关重要。

在 DataFrames 上运行 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 在处理大型 DataFrames 时可能会比较慢 - 考虑直接使用 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 为 TikTok、YouTube Shorts 和 Instagram Reels 提供强大的无脸视频创作功能

AdPlexity

揭秘竞争对手在六大流量渠道中最赚钱的广告活动  全球联盟营销人员和媒体购买者信赖的排名第一的广告侦测工具。

库存AI

利用人工智能,几秒钟内生成专业视觉效果、徽标和社交媒体内容。 您的一体化 AI 设计和社交媒体自动化平台。

复制

创建 AI 几分钟内即可制作配音、会说话的虚拟形象和多语言视频内容 一体式 AI 面向内容创作者的语音和视频创作平台

专业照片人工智能

90分钟内将普通自拍变成专业级头像照 最快获得专业精美肖像照的途径。

© 2023 - 2026 版权所有 | 成为 AI 专业版 | 用心打造