用pandas.grouper按秒/毫秒分组需设origin='start'确保起点对齐,索引须为时区感知的单调datetimeindex;ohlc中open/close取iloc[0]/iloc[-1],避免first()/last();计算用numba加速,读取用chunksize流式处理。

用 pandas.Grouper 按秒/毫秒对 datetime 索引做区间分组,别用 resample 直接套
高频Tick数据(如逐笔成交)时间戳精度常达毫秒级,直接用 resample('1S') 容易漏掉跨毫秒边界的切片——resample 默认按日历边界对齐(如整秒起始),而真实交易流是连续到达的。必须用 Grouper 配合 origin='start' 或 origin='epoch' 控制分组起点。
实操建议:
- 确保
index是pd.DatetimeIndex且tz-aware(尤其跨时区数据),否则Grouper可能静默错位 - 切片窗口用
freq='100L'(100毫秒)、'500L'或'1S',注意L表示毫秒,ms也可但L更通用 - 若需“每收到100条就切一片”,改用
groupby(df.index // pd.Timedelta('100L')),避免依赖时间戳绝对值
计算 OHLCV 时,open/close 必须取首尾行,不能用 first()/last()
Tick 数据中同一毫秒内可能有多笔成交(尤其交易所撮合引擎输出),first() 和 last() 按分组内排序取值,但 pandas 默认不保证原始顺序——尤其读取 CSV 后未显式设置 sort_index=False 或未用 df.sort_index() 对齐时间戳。
实操建议:
- 先执行
df = df.sort_index(),再分组;或读取时加parse_dates=['time'], index_col='time'并确认df.index.is_monotonic_increasing为True - OHLC 中
open取iloc[0]['price'],close取iloc[-1]['price'],high/low/volume才用max()/min()/sum() - 避免写
.agg({'price': 'first', 'volume': 'sum'})——'first'在非单调索引下行为不可控
numba.jit 加速滚动统计比 rolling().apply() 快 5–20 倍,但要注意数据连续性
对切片后的时间序列计算 VWAP、移动标准差等指标时,rolling(window=10).apply(lambda x: np.average(x, weights=df.loc[x.index, 'volume'])) 这类操作在百万级 Tick 上会卡死——apply 是纯 Python 循环,且每次调用都触发索引查找。
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
实操建议:
- 把价格、成交量转成
numpy.ndarray,用@numba.jit(nopython=True)写循环,传入两个数组和窗口大小 - 确保输入数组无
NaN,numba不支持np.nan运算;预处理用df.fillna(0)或剔除 - 滚动窗口必须是固定长度(
rolling(window=20)),变长窗口(如按时间范围)得手动用searchsorted定位左右边界
内存爆炸?用 chunksize + yield 流式处理,别一次性 read_csv
单日 A股 Level3 Tick 数据可达 50GB+,pandas.read_csv() 直接加载必然 OOM。即使切片后计算指标,中间 DataFrame 仍含大量冗余字段(如订单号、买卖方向)。
实操建议:
- 读取时指定
usecols=['time', 'price', 'volume', 'side'],dtype={'side': 'category'}节省内存 - 用
pd.read_csv(..., chunksize=100000)分块,每块做完切片+指标后立即del掉原始 chunk 引用 - 关键:不要拼接所有结果到一个大
list,改用yield返回生成器,上游用pd.concat((chunk_result for chunk_result in process_chunks()), copy=False)
高频 Tick 的区间切片不是单纯的时间对齐,本质是重建事件流的观测窗口——起点控制、顺序保障、内存水位,三者缺一不可。最容易被忽略的是索引单调性检查,很多“计算结果跳变”问题其实源于没跑 df.sort_index()。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










