You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pd.to_datetime解析Ninja Trader期货tick数据时间格式报错问题问询

Ninja Trader tick数据时间格式转换解决方案

错误原因

你遇到的解析错误核心原因是Ninja Trader导出的时间戳为%Y%m%d %H%M%S %f的自定义格式(无符号分隔的年月日、时分秒 + 微秒补位),pandas默认的日期解析规则无法匹配该格式,因此抛出ParserError: Unknown string format报错。而你之前用ib_insync从IB下载的数据时间戳符合pandas默认识别的标准格式,因此无需额外配置即可正常解析。

解决步骤

方案1:导入后转换(适配现有代码)

在调用pd.to_datetime时手动指定匹配的格式,注意你的时间戳末尾有7位微秒补位,pandas的%f参数仅支持6位微秒,需要先截取掉最后一位多余字符:

import pandas as pd

# 现有导入代码
data = pd.read_csv(r"C:\__dir__test.txt",sep=';')
data.columns = ["date","P1","P2","P3","V"]

# 新增:处理时间字符串并指定格式转换
data["date"] = data["date"].str.strip().str[:-1]
data["date"] = pd.to_datetime(data["date"], format="%Y%m%d %H%M%S %f")

# 后续拆分日期时间可正常运行
data['Dates'] = data['date'].dt.date
data['Time'] = data['date'].dt.time

格式符含义说明:

  • %Y:4位年份
  • %m:2位月份
  • %d:2位日期
  • %H:2位24小时制小时
  • %M:2位分钟
  • %S:2位秒
  • %f:6位微秒

方案2:导入时直接解析(更高效)

你可以在pd.read_csv阶段就完成日期解析和列名指定,减少后续操作:

import pandas as pd

# 自定义Ninja Trader日期解析函数
def parse_nt_date(date_str):
    return pd.to_datetime(date_str.strip()[:-1], format="%Y%m%d %H%M%S %f")

# 导入时直接完成列名分配、日期解析
data = pd.read_csv(
    r"C:\__dir__test.txt",
    sep=';',
    names=["date","P1","P2","P3","V"],
    parse_dates=["date"],
    date_parser=parse_nt_date
)

验证效果

转换完成后你可以直接用datetime的切片功能筛选指定时间区间的数据,示例:

# 筛选2021年10月31日22点的所有tick数据
target_data = data[data["date"].dt.hour == 22]

内容的提问来源于stack exchange,提问作者TrdX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:45:05