如何判断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
相关产品推荐
相关产品推荐

