有时候你明明手上攒了一堆数据,行情表、因子表、分钟线、行业划分……想着能不能快点弄出点靠谱结论。但一打开 pandas,内存爆了、速度慢了、逻辑绕了,心态先崩一半。
直到我遇见了 DuckDB。
不夸张地说,这玩意儿让我重新爱上了处理数据的感觉。尤其是搞量化的朋友,听我一句劝:早点上车,省时省力还省气。

DuckDB 是啥?凭啥这么香?
简单讲,它是一种「本地 SQL 引擎」,你可以把它理解成“能嵌进 Python 的数据库大脑”。
不需要部署,不需要连服务端,就像用个函数库一样,把 SQL 写进 Python,想查啥查啥。你甚至可以直接用 SQL 操作 Pandas 的 DataFrame!
是的,它就是把传统数据库的高性能 SQL 引擎,塞进了你的笔记本电脑里,开箱即用。
为什么说它适合量化?
- 超快数据处理:比 pandas 快许多,尤其是在 join、聚合和窗口函数这种场景。
- 支持多格式:CSV、Parquet、Arrow,甚至支持云端 S3,连读取都不用转格式。
- 无缝对接 Pandas:不用注册表、不用改格式,DataFrame 直接扔进去查。
- 语法清晰:SQL 一行抵 pandas 十行链式代码,逻辑更好维护。
安装只要一行,懒人最爱
别被“数据库”吓着了,它比 pandas 还好装:
pip install duckdb
没了。就这么一句。
你甚至不需要连数据库,不用管端口地址,Jupyter 直接开干,连环境变量都省了。
实战场景:DuckDB 是怎么救我的
下面几个场景,应该是每个搞数据的朋友都踩过的坑。DuckDB 是怎么解决它们的,咱一个个说清楚。
场景一:巨型 CSV,不想再等了!
还记得上次打开某券商导出的 daily.csv 吗?直接用 pandas:
pd.read_csv('daily.csv')
10 分钟后,风扇转速飙升,内存飙红,电脑开始卡顿。
换成 DuckDB:
import duckdb
duckdb.sql("SELECT date, symbol, close FROM read_csv('daily.csv') WHERE symbol = '000001.SZ'").df()
只选我想看的股票,几秒钟就出了结果,内存还没涨多少。
场景二:DataFrame 也能直接查?!
是的你没看错。
import pandas as pd
df = pd.read_csv('daily.csv')
res = duckdb.sql("""
SELECT symbol, AVG(close) AS avg_close
FROM df
WHERE date >= '2024-01-01'
GROUP BY symbol
""").df()
你甚至不用把 df 转成表,也不用注册,它直接能识别你 Python 里的变量!什么叫无缝融合,这就是。
场景三:我想查远程数据,能不能别让我手动下载?
DuckDB 支持 S3、HTTP、HTTPS 的路径。
duckdb.sql("""
SELECT * FROM read_parquet('https://example.com/data.parquet')
""").df()
它自己去云上拉数据,还能边查边处理。大文件也能照样干。
场景四:我有三张表要 join,能不能一口气整完?
以前用 pandas 多表 join,要先 merge、再处理列名、再 groupby,看得人头晕。
DuckDB 一条 SQL 搞定:
duckdb.sql("""
SELECT p.date, p.symbol, p.close, f.pb, f.pe
FROM read_parquet('price.parquet') p
JOIN read_parquet('factor.parquet') f
ON p.symbol = f.symbol AND p.date = f.date
""").df()
对我们搞因子分析的人来说,这种“表对表”的数据融合,再熟悉不过,DuckDB 提升的是执行效率,更是你脑力的节省。
场景五:滚动均线、动量指标,这种能搞吗?
你以为 SQL 不支持技术指标?那是你没用过窗口函数。
duckdb.sql("""
SELECT symbol, date,
AVG(close) OVER(PARTITION BY symbol ORDER BY date ROWS 19 PRECEDING) AS ma20
FROM read_parquet('price.parquet')
""").df()
一行代码,滚动 20 日均线直接出来。
用 pandas 做这个,不但得 sort,还得 rolling,链得跟八爪鱼一样。DuckDB 把这些复杂处理变得优雅极了。
我对 DuckDB 的几点真实感受
如果说 pandas 是小刀锯大树,那 DuckDB 就像上了电锯。
- 它不像数据库,却又比数据库还灵活;
- 它不像 pandas 却比 pandas 更像你脑子里的分析逻辑;
- 它看起来轻,但你会发现它能顶许多专业工具。
说实话,我以前也试过用 ClickHouse、Spark 之类的大工具处理量化数据,但门槛高、配置烦。DuckDB 是为“搞数据分析但又不想当 DBA”的人设计的。
写在最后:工具不是关键,思路才是核心
DuckDB 不是万能的,它解决的是数据处理这一步的瓶颈,特别是对量化研究的朋友:你有大量结构化数据、对时间敏感、计算密集,它刚好补上 pandas 的短板。
但归根结底,一个好的工具,只是放大你的思考力。
你要是啥都不想清楚,工具再好也是白搭;你思路清晰,用个石头也能抠出金子。
所以我更推荐把 DuckDB 作为“思维外化的引擎”——你脑子里怎么设想,代码里就怎么写,不用绕、不用猜。
如果你也有在数据面前感觉“思路比工具更难搞”的那种时刻,不妨从 DuckDB 开始,走一步轻松点的路径。
✨ 关键词整理(提议收藏)
|
关键词 |
说明 |
|
duckdb.sql() |
执行 SQL 语句,结果可转 DataFrame |
|
read_csv() / read_parquet() |
DuckDB 自带的读取方法,支持直接 SQL |
|
DataFrame 查询 |
DuckDB 自动识别变量,无需注册表 |
|
窗口函数 |
一行代码做 rolling、rank、累计计算等 |
|
云端读取 |
支持 S3、HTTP 等远程路径数据读取 |
如果你也准备开干下一轮因子回测、分钟级数据挖掘,或者只是被 pandas 折磨得够呛,试试 DuckDB。你可能会惊喜地发现,它让数据世界变得没那么烦了。



厉害了👍
收藏了,感谢分享
收藏学习了