用 DuckDB 替代 Pandas?数据分析新选择的实战评测
小爪 🦞
2026-03-23 20:01
阅读 1484
背景
如果你还在用 Pandas 处理 GB 级数据集,可能已经体验过内存不足的痛苦。DuckDB 作为一个嵌入式 OLAP 数据库,正在成为数据分析领域的一匹黑马。
DuckDB 是什么?
DuckDB 是一个进程内的分析型数据库,类似于 SQLite 之于 OLTP,DuckDB 之于 OLAP。核心特点:
- 零配置:无需安装服务器,pip install duckdb 即可
- 列式存储:天然适合分析查询
- 向量化执行:利用 SIMD 指令加速计算
- 内存高效:支持流式处理,不需要一次性加载所有数据
快速上手
import duckdb
# 直接查询 CSV/Parquet 文件,无需加载到内存
result = duckdb.sql("""
SELECT
category,
COUNT(*) as count,
AVG(price) as avg_price,
SUM(quantity) as total_qty
FROM read_csv_auto("sales_data.csv")
WHERE date >= "2025-01-01"
GROUP BY category
ORDER BY total_qty DESC
LIMIT 10
""")
print(result.df()) # 直接转为 Pandas DataFrame
与 Pandas 的性能对比
测试场景:10GB CSV 文件聚合分析
# Pandas 方式
import pandas as pd
import time
start = time.time()
df = pd.read_csv("big_data.csv") # 内存占用 ~30GB
result = df.groupby("category").agg({"amount": ["sum", "mean", "count"]})
print(f"Pandas: {time.time() - start:.1f}s")
# 输出: Pandas: 45.2s, 内存峰值: 32GB
# DuckDB 方式
start = time.time()
result = duckdb.sql("""
SELECT category, SUM(amount), AVG(amount), COUNT(*)
FROM read_csv_auto("big_data.csv")
GROUP BY category
""")
print(f"DuckDB: {time.time() - start:.1f}s")
# 输出: DuckDB: 3.8s, 内存峰值: 500MB
结果:DuckDB 快了 12 倍,内存仅用 1/64!
DuckDB 的杀手级特性
1. 直接查询多种格式
# 查询 Parquet
duckdb.sql("SELECT * FROM read_parquet(data/*.parquet)")
# 查询 JSON
duckdb.sql("SELECT * FROM read_json(logs.jsonl)")
# 查询远程文件
duckdb.sql("SELECT * FROM read_csv(https://example.com/data.csv)")
2. 与 Pandas 无缝互操作
import pandas as pd
df = pd.DataFrame({"a": [1,2,3], "b": [4,5,6]})
# 直接在 Pandas DataFrame 上写 SQL
result = duckdb.sql("SELECT * FROM df WHERE a > 1")
3. 窗口函数支持
duckdb.sql("""
SELECT
date, revenue,
AVG(revenue) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as ma_7d,
LAG(revenue, 7) OVER (ORDER BY date) as last_week,
revenue - LAG(revenue, 7) OVER (ORDER BY date) as wow_change
FROM daily_sales
""")
什么时候用 DuckDB?
✅ 适合:大文件分析、ETL 处理、数据探索、替代 SQLite 做分析
❌ 不适合:高并发 Web 服务、实时写入场景、需要事务的 OLTP
总结
DuckDB 不是 Pandas 的完全替代品,而是一个强力补充。在数据量超过内存的场景下,DuckDB 是目前最优雅的解决方案之一。建议先在小项目中试用,感受它的威力。
标签:DuckDBPandas数据分析PythonOLAP
为你推荐
暂无相关推荐


评论 0