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

如何判断Pandas日期列的日期是否为期权到期日并处理调用报错

报错根因

  • isoweekday()是Python原生datetime对象的方法,不能直接调用在pandas日期Series上,需要通过.dt访问器调用,格式为spx_df['Date'].dt.isoweekday()
  • 原代码直接对整个Series做if判断不符合pandas矢量运算逻辑,不需要自定义逐行判断函数,直接用布尔掩码生成目标列效率更高

实现方案

首先确认日期列已转为datetime格式,未转换的话先执行类型转换:

import pandas as pd
# 转换日期列格式,确保.dt访问器可用
spx_df['Date'] = pd.to_datetime(spx_df['Date'])

你已经提前剔除了所有非交易日(周六、周日、法定节假日),直接按如下逻辑生成Expiry Day列即可:

# 条件1:当前为常规到期日 周一/周三/周五
weekday_mask = spx_df['Date'].dt.isoweekday().isin([1,3,5])
# 条件2:当前为提前到期日,下一个交易日是原本的周一/周三/周五(原到期日为节假日已被剔除)
spx_df['next_trading_day_weekday'] = spx_df['Date'].shift(-1).dt.isoweekday()
advance_mask = spx_df['next_trading_day_weekday'].isin([1,3,5])

# 合并条件生成目标列
spx_df['Expiry Day'] = weekday_mask | advance_mask
# 删除辅助计算列
spx_df.drop('next_trading_day_weekday', axis=1, inplace=True)

# 按你的需求生成单独的cs_win_loss_df
cs_win_loss_df = spx_df[['Date', 'Expiry Day']]

逻辑验证

你可以抽取样本数据校验结果:

  • 正常周一/周三/周五:标记为True
  • 周二且对应周三是节假日(不在数据集内):周二标记为True
  • 周四且对应周五是节假日(不在数据集内):周四标记为True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:02