datetime处理:量化代码的第一口"时间基准"锅
先掌握这个答案
pd.to_datetime:把各种格式统一为datetime64类型——支持format参数指定格式(format='%Y%m%d'可解析"20240115")。两大坑:①格式猜错(日/月混淆——01/02是1月2日还是2月1日?——用dayfirst或format显式指定);②时区(UTC vs 北京时间——跨市场必须统一)。set_index后的操作:切片df['2020':'2024']按年、df['2024-01']按月;resample('W')周频重采样;rolling(20)自动按行(不按天数——纯交易日计数)。日期差:df.index.to_series().diff().dt.days——注意节假日会出4-7天(不是1天)——交易日对齐要用交易日历(q-068)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 一条能复现的数据流水线
把接口返回的数据变成可用于因子研究的面板时,先处理时点、主键与单位。
- 建立数据字典:字段、单位、时区、交易日历、数据源、抓取时间、原始价与复权因子。
- 用(date, code)查重,区分停牌、未上市、窗口不足和真实缺失;不要用向后填充把未来值带回过去。
- 保存原始快照与清洗日志,固定随机种子和环境版本;接口字段变化时先核对官方文档。
使用边界
- 报告期不等于公告可用日,盘后公告通常不能用于当天收盘前决策。
- API输出名为“动态市盈率”时不能直接改名TTM;浏览器练习不支持任意原生库或行情抓取接口。
- 字符串日期可以直接切片:df['2024-01':'2024-03']在字符串索引下行为不一致——必须先to_datetime再set_index
- diff()的天数=交易日:不——是日历天(周末=2天、长假=7天);算「N天前」要用shift(N)(交易日)不是日期减N天
- 时区不需要管:单市场无所谓——A股+美股+加密混合时必须统一(通常统一UTC或统一北京时间)——错位一天=全错
- 20240115这种整数日期pandas能自动识别:不能——必须format='%Y%m%d'显式指定
🛠 本题实践任务
对你的数据做三行仪式(to_datetime/set_index/sort_index)——然后试df.loc['2024':]和df['close'].rolling(5).mean()——确认时序魔法生效。
💡 提示(先自己想5分钟再看)
如果date列已被to_datetime解析为datetime就不需要format参数;关键是set_index后loc切片才按日期语义工作。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
🤖 AI导师
导师会先检查你的前置知识(loc/iloc、索引概念),再用案例、公式和代码帮助理解。此功能需要先启用服务。