AlphaFeed Blog

如何把 A 股行情高效存成 Parquet/Feather?(比 CSV 更省空间、保留类型)

工程化 · 代码验证于 2026-09-23

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

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

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

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

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

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

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)

# 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 步:分区存储(按标的/日期切分,便于增量与按需读)

# 按 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"]按时间范围读、追加当日

关键坑与注意事项

常见问题(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 的三分之一。配合按标的/日期分区,就能构建高效、可增量更新的本地行情库。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与逻辑仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。