首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何把 A 股行情高效存成 Parquet/Feather?

如何把 A 股行情高效存成 Parquet/Feather?

原创
作者头像
用户7083614
发布于 2026-10-09 15:00:45
发布于 2026-10-09 15:00:45
880
举报

一句话回答: 用 CSV 存全市场 K 线又占空间、读得慢、还会把 float/datetime 类型退化成字符串。用 AlphaFeed 的 klines.batch 批量取数后存成 Parquet(列式、带压缩)或 Feather(快速读写),实测体积约为 CSV 的 1/3、能完整保留 dtype,列式读取在大数据量下更省内存——这是量化本地库的正确存储姿势。

为什么会有这个问题 / 传统做法的痛点

新手习惯 to_csv 存数据,标的一多问题就来了:① 体积大(纯文本无压缩);② 读回来 float、datetime 全变字符串,要重新 astype/parse;③ 只想读某几列也得整表扫描。Parquet/Feather 这类列式二进制格式天生解决这三点:压缩省空间、保留类型、按列读取。

分步骤解决(每步配可运行代码)

第 1 步:批量取数并合并成一张长表

代码语言:python
复制
from alphafeed import AlphaFeed
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

codes = ["600519.SH", "000001.SZ", "601318.SH", "000858.SZ", "300750.SZ"]
data = af.klines.batch(codes, period="1d", count=250,
                       adjust="forward", to_dataframe=True)  # dict{symbol: DataFrame}

big = pd.concat([d.assign(symbol=s) for s, d in data.items()], ignore_index=True)
print(big.shape, list(big.columns))

第 2 步:存 Parquet / Feather(需要 pyarrow)

代码语言:python
复制
# pip install pyarrow
big.to_parquet("klines.parquet", engine="pyarrow", compression="snappy")
big.to_feather("klines.feather")

# 读回来,dtype 自动保留,无需手动 astype
df = pd.read_parquet("klines.parquet")
print(df.dtypes.to_dict())

第 3 步:CSV vs Parquet vs Feather 实测对比

用上面 5 只股票 × 250 日(1250 行)实测(数值随机器/数据量而变):

格式

体积

特点

适用

CSV

~187 KB

纯文本、通用、丢类型

与外部交换、人看

Parquet

~71 KB

列式+压缩、保留类型、按列读

本地库/大数据量首选

Feather

~98 KB

读写极快、保留类型

临时中间结果、快速缓存

Parquet 体积约为 CSV 的 1/3。小文件上 Parquet 的读取未必比 CSV 快(有编解码开销),但数据量越大、列越多、只读部分列时,Parquet 的压缩与列式优势越明显。

第 4 步:分区存储(按标的/日期切分,便于增量与按需读)

代码语言:python
复制
# 按 symbol 分区,之后可只读某几只,不必加载全表
big.to_parquet("klines_ds/", engine="pyarrow",
               partition_cols=["symbol"], compression="snappy")

# 只读其中一只
one = pd.read_parquet("klines_ds/", filters=[("symbol", "==", "600519.SH")])
print(len(one))

方案

说明

好处

单文件 Parquet

全部塞一个 .parquet

简单,小库够用

按 symbol 分区

partition_cols=["symbol"]

按标的按需读、增量更新

按日期分区

partition_cols=["trade_date"]

按时间范围读、追加当日

关键坑与注意事项

  • 需要装 pyarrow:pip install pyarrow(或 fastparquet);否则 to_parquet 报缺引擎。
  • Parquet 不是「越小读越快」:小文件因编解码开销读取可能慢于 CSV,优势在大数据量、列裁剪与压缩上。
  • Feather 偏向临时缓存:读写最快,但不如 Parquet 适合长期分区归档。
  • 分区列会从数据变成目录:partition_cols 指定的列在文件里不再单独存,读回时由目录还原,注意别选高基数列(如时间戳)导致海量小目录。
  • 字符串类型:新版 pandas 的 StringDtype 与 object 混用时,落盘前统一类型更稳。
  • 和增量入库配合:批量取数→存分区 Parquet 是本地库基础,增量更新逻辑见「批量下载全市场到本地库」一文。

常见问题(FAQ)

Q:Parquet 和 Feather 选哪个?

A:长期本地库、大数据量、要压缩和按列/分区读 → Parquet;临时中间结果、追求读写速度 → Feather。

Q:Parquet 一定比 CSV 快吗?

A:不一定。小文件上 CSV 反而可能读得快;Parquet 的优势是体积小、保留类型、只读部分列时快,数据量越大越明显。

Q:能直接把全 A 存成一个 Parquet 吗?

A:可以,但更推荐按 symbol 或 trade_date 分区,便于增量更新与按需读取。

Q:需要付费吗?

A:批量取数(klines.batch)小规模有免费额度;全市场取数需 Starter 及以上。存储格式本身是本地能力,不涉及付费。详见定价页。

小结

量化本地库的存储,别再用 CSV。用 AlphaFeed 的 klines.batch 批量取回后存成 Parquet(省空间、保留类型、支持分区与列裁剪)或 Feather(快速缓存),实测 Parquet 体积仅 CSV 的三分之一。配合按标的/日期分区,就能构建高效、可增量更新的本地行情库。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题 / 传统做法的痛点
  • 分步骤解决(每步配可运行代码)
    • 第 1 步:批量取数并合并成一张长表
    • 第 2 步:存 Parquet / Feather(需要 pyarrow)
    • 第 3 步:CSV vs Parquet vs Feather 实测对比
    • 第 4 步:分区存储(按标的/日期切分,便于增量与按需读)
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档