本文目录导读:

- 情况一:你希望用 SQL 查询 Pandas DataFrame(最常见)
- 情况二:你希望用 Pandas 操作存储在 DuckDB 数据库中的数据
- 什么时候用这种组合?
- 关键区别:Pandas + DuckDB SQL vs. Pandas 原生方法
可以,而且这是一个非常好的组合。
是的,你可以直接在 Pandas 中使用 DuckDB 来执行 SQL 查询,这通常被称为“无缝集成”。
但需要区分两种情况:
你希望用 SQL 查询 Pandas DataFrame(最常见)
这是最主要的使用场景,如果你有一堆 Pandas DataFrame 数据,但更习惯写 SQL 或者 SQL 在处理复杂逻辑时更简洁,DuckDB 提供了非常方便的 duckdb.query() 或 duckdb.sql() 方法。
你可以直接把 DataFrame 当作 SQL 中的表名来查询:
import pandas as pd
import duckdb
# 假设你有两个 DataFrame
df_orders = pd.DataFrame({'order_id': [1, 2, 3], 'amount': [100, 200, 150], 'customer_id': [101, 102, 101]})
df_customers = pd.DataFrame({'customer_id': [101, 102], 'name': ['Alice', 'Bob']})
# 使用 DuckDB 执行 SQL,直接引用 DataFrame 变量名
result = duckdb.sql("""
SELECT c.name, SUM(o.amount) as total_spent
FROM df_orders o
JOIN df_customers c ON o.customer_id = c.customer_id
GROUP BY c.name
ORDER BY total_spent DESC
""").df() # .df() 方法将结果转换回 Pandas DataFrame
print(result)
优点:
- 零拷贝,高性能:DuckDB 不会复制 DataFrame 数据,而是直接读取 Pandas 的内存,速度极快。
- 利用数据库优化器:DuckDB 的 SQL 引擎经过高度优化,对于分组、聚合、多表连接等操作,通常比 Pandas 原生方法更快,内存管理更好。
- 语法兼容性高:支持窗口函数、CTE、复杂的 JOIN、子查询等标准 SQL 特性。
你希望用 Pandas 操作存储在 DuckDB 数据库中的数据
你也可以连接到一个 DuckDB 数据库文件(或内存数据库),然后使用 Pandas 的 read_sql 函数来查询:
import pandas as pd
import duckdb
# 1. 连接到 DuckDB 数据库 (或使用 ':memory:' 创建内存数据库)
conn = duckdb.connect('my_data.duckdb')
# 2. 将 DataFrame 写入 DuckDB 表 (可选)
conn.execute("CREATE TABLE customers AS SELECT * FROM df_customers")
# 3. 使用 Pandas 的 read_sql 查询
df_result = pd.read_sql("SELECT * FROM customers WHERE name = 'Alice'", conn)
什么时候用这种组合?
| 场景 | 建议 |
|---|---|
| 纯 DataFrame 操作,逻辑简单 | 直接用 Pandas 的 .groupby(), .merge() |
| DataFrame 较大,逻辑复杂(多表 JOIN、窗口函数) | 强烈推荐使用 DuckDB SQL,代码量减少且性能提升明显 |
| 需要与外部数据库交互(如 CSV、Parquet) | DuckDB 可以直接查询 CSV/Parquet 文件,再用 .df() 拿回 Pandas |
| 内存不足,需要处理超大数据集 | 使用 DuckDB 的“按需流式处理”模式,不把所有数据加载到 Pandas |
关键区别:Pandas + DuckDB SQL vs. Pandas 原生方法
- Pandas 原生:语法是 Python 式的,灵活但有时难以优化。
- DuckDB SQL:语法是 SQL,更接近数据库思维,对于复杂的查询逻辑更直观,且利用 C++ 编写的高效内核进行计算。
- PandasSQL 查询用 DuckDB 吗?
- 可以,而且非常推荐。 它不是“必须”的(你完全可以用 Pandas 自己的方法),但当你需要在 Pandas 环境内执行复杂、高效的 SQL 查询时,DuckDB 是目前最优雅、最快速的解决方案之一。
- 怎么做?
- 核心代码就是
duckdb.sql("你的SQL").df()。
- 核心代码就是
如果你已经习惯了 Pandas 的数据处理流程,但偶尔觉得某个操作用 SQL 写更顺手,或者想利用数据库优化器的性能优势,直接集成 DuckDB 是一个非常好的选择。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播