Pandas Timestamp与.isin方法报错问题排查
问题根源
单个Timestamp对象确实没有isin方法——isin是pandas的Series、DataFrame这类批量数据结构的方法,DataFrame里的datetime64[ns]列本质是Series,所以能正常调用isin;但你通过apply传入的是单个Timestamp实例,自然会触发AttributeError。
解决方法
有几种简单直接的修复方式:
方法1:用in操作符直接判断
DatetimeIndex本身支持成员检查,直接用in替代isin,代码简洁且高效:
def check_prev_business_day(trade_date): prev_day = trade_date - BDay(1) return prev_day in pricing_date # 直接判断日期是否在目标索引中
方法2:将单个Timestamp转为Series后调用isin
如果一定要用isin语法,可以把单个Timestamp包装成仅含一个元素的Series,再取结果的第一个值:
import pandas as pd def check_prev_business_day(trade_date): prev_day = trade_date - BDay(1) return pd.Series([prev_day]).isin(pricing_date).iloc[0]
方法3:用DatetimeIndex的get_loc方法(进阶)
如果需要更底层的存在性检查,可以用get_loc方法,结合异常处理判断:
def check_prev_business_day(trade_date): prev_day = trade_date - BDay(1) try: pricing_date.get_loc(prev_day) return True except KeyError: return False
性能提示
处理大体积DataFrame时,方法1(in操作)和方法3(get_loc)的性能优于方法2,因为不需要额外创建Series对象。
内容的提问来源于stack exchange,提问作者user21584139
相关产品推荐
相关产品推荐

