发现一个不错的库推荐给大家:DuckDB + Python + Pandas 的组合,量化研究利器 🚀

大家好,我是花姐。 最近折腾数据处理的时候,发现了一个宝藏库------DuckDB,配合 Python 和 Pandas 简直不要太香!今天我就聊聊它到底有多好用,特别适合我们搞量化研究的同学。


1. DuckDB 是什么?

DuckDB 是一款嵌入式的 OLAP 数据库,目标就是把复杂 SQL 的计算能力直接带到 Python 里

和传统数据库不一样:

  • 无需安装服务器,pip 一行命令搞定
  • 完全运行在本地进程里,数据交互无延迟
  • SQL 查询可以直接对 Pandas DataFrame、CSV、Parquet 等各种数据源执行

一句话:像写 SQL 一样处理数据,比 Pandas 更快,内存占用更低,还能跨格式操作


2. 安装方式超级简单

只需要一行命令:

bash 复制代码
pip install duckdb

装完后就能在 Jupyter / VSCode 里直接用,不用连数据库、不用部署服务。


3. 数据处理的核心优势

3.1 直接读文件

CSV、Parquet、JSON 等文件,可以直接用 DuckDB 的 SQL 读取:

python 复制代码
import duckdb

# 读 CSV
duckdb.read_csv('daily.csv')

# 读 parquet
duckdb.read_parquet('data/*.parquet')

# 或直接 SQL
duckdb.sql("SELECT * FROM 'data/daily.csv'")

无需手动用 pandas 先读,DuckDB 自带高效的文件读取引擎。


3.2 SQL 直接跑在 Pandas DataFrame 上

这个特性对量化研究太友好了!

python 复制代码
import pandas as pd
import duckdb

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

不用注册、不用额外配置,DuckDB 会自动识别 Python 里的 DataFrame,当成表来查。


3.3 支持 Arrow、Polars、云端数据

如果数据是 Arrow/Polars 格式,DuckDB 也能直接使用; 文件路径支持 HTTP/HTTPS/S3,云上的数据能直接查询,非常灵活。


4. 量化研究的高频应用场景

4.1 直接查询超大 CSV

行情或分钟数据很大时,用 pandas 直接读常常爆内存,用 DuckDB 一条 SQL 就能过滤聚合:

python 复制代码
duckdb.sql("""
    SELECT date, symbol, close
    FROM read_csv('daily.csv')
    WHERE symbol IN ('000001.SZ','600000.SH')
""").df()

4.2 多表 join 超方便

因子表、行情表、行业表,多表合并一条 SQL 解决:

python 复制代码
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()

4.3 窗口函数秒算指标

像滚动均线、动量指标,用 SQL 的窗口函数一行就搞定:

python 复制代码
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()

5. 为什么强烈推荐?

  1. 简单省心:免部署,不用维护数据库
  2. 性能强:比 pandas 快很多,join/聚合/窗口函数都快
  3. 无缝衔接:对 Pandas DataFrame 和 Parquet 文件支持非常顺滑
  4. 代码优雅:用 SQL 代替繁琐的链式 pandas 代码,逻辑清晰

对我们搞量化的来说,这就是一把开箱即用的数据分析利器。


花姐小结

DuckDB + Python + Pandas,这套组合简直就是量化研究的新神器,特别适合处理日线、分钟线、财务因子这些大数据。

如果你也经常被 pandas 的慢和内存瓶颈搞得焦头烂额,不妨试试它!

相关推荐
老朋友此林7 小时前
MongoDB GEO 项目场景 ms-scope 实战
java·数据库·spring boot·mongodb
追逐时光者8 小时前
一个基于 ASP.NET Core 的开源、模块化、多租户应用框架和内容管理系统
后端·.net
极限实验室8 小时前
如何使用 INFINI Gateway 对比 ES 索引数据
数据库
小蒜学长9 小时前
springboot二手儿童绘本交易系统设计与实现(代码+数据库+LW)
java·开发语言·spring boot·后端
Raymond运维9 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql
xqlily9 小时前
Go语言:高效简洁的现代编程语言
开发语言·后端·golang
数据知道9 小时前
Go语言:数据压缩与解压详解
服务器·开发语言·网络·后端·golang·go语言
席万里9 小时前
什么是GO语言里面的GMP调度模型?
开发语言·后端·golang
养生技术人10 小时前
Oracle OCP认证考试题目详解082系列第45题
运维·数据库·sql·oracle·开闭原则·ocp
奥尔特星云大使10 小时前
mysql主从配置(保姆级)
数据库·mysql·主从复制