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

Python中VAR分析时出现日期解析错误的排查求助

问题排查:VAR分析中滞后相关性测试报错Unknown datetime string format, unable to parse: tr

问题描述

我在对情绪值与收益率数据做VAR分析时,遇到以下问题:

  • 加载收益率数据tr时,因parse_dates读取异常,手动将日期索引转为DateTimeIndex;情绪数据Index通过parse_dates直接加载成功
  • 为数据设置频率后,运行滞后相关性测试循环时,抛出错误:Unknown datetime string format, unable to parse: tr

相关代码

加载收益率数据

tr = pd.read_csv("PATH", skiprows = 0 ,index_col = 1,squeeze = True, sep = ";", decimal=",")

tr.index = pd.to_datetime(tr.index, format = "%Y-%m-%d")
tr = tr.reset_index()
tr["quarter"] = tr["quarter"].apply(lambda x: x.strftime('%Y-%m'))
tr.set_index('quarter', inplace=True)
tr.index = pd.to_datetime(tr.index, format = "%Y-%m")

加载情绪数据

Index = pd.read_csv("PATH", parse_dates = [0], index_col = 0, skiprows = 0 ,squeeze = True, sep = ";", decimal=",")

设置频率

tr = tr.asfreq(pd.infer_freq(tr.index)) 
Index = Index.asfreq(pd.infer_freq(Index.index))

滞后相关性测试

for lag in range (1, 24):
    tr = tr["return"].iloc[lag:]
    lagged_opt = Index["Sentiment"].iloc[:-lag]
    print("lag: %s"%lag)
    print(pearsonr(tr, lagged_opt))
    print("-------")

报错原因

循环内的tr = tr["return"].iloc[lag:]是核心问题:

  1. 第一次循环时,tr原本是带索引的DataFrame,执行该行后,tr被覆盖为Series(仅保留return列的切片数据)
  2. 第二次循环时,再次执行tr["return"],此时tr是Series且索引为日期类型,Python会尝试将字符串"return"解析为日期,最终因格式不匹配抛出解析错误(报错信息中的tr应为显示误差,实际是解析"return"失败)

修复方案

不要在循环中覆盖原始的tr变量,改用临时变量存储切片后的数据:

# 提前提取需要的列,避免循环内重复操作
tr_return = tr["return"]
index_sentiment = Index["Sentiment"]

for lag in range(1, 24):
    current_tr = tr_return.iloc[lag:]
    lagged_opt = index_sentiment.iloc[:-lag]
    print(f"lag: {lag}")
    print(pearsonr(current_tr, lagged_opt))
    print("-------")

额外优化建议

  • 检查tr和Index的索引是否完全对齐,避免因长度不一致导致计算错误
  • 可以用pd.Series.shift()实现滞后操作,代码更简洁且自动处理缺失值:
tr_return = tr["return"]
index_sentiment = Index["Sentiment"]

for lag in range(1, 24):
    lagged_sentiment = index_sentiment.shift(lag)
    # 合并后删除缺失值,保证序列长度一致
    combined_data = pd.concat([tr_return, lagged_sentiment], axis=1).dropna()
    print(f"lag: {lag}")
    print(pearsonr(combined_data["return"], combined_data["Sentiment"]))
    print("-------")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:36