AlphaLens报错:'MultiIndex'对象无'tz'属性,求数据对齐测试方案
AlphaLens 时区索引对齐错误排查求助
正在准备数据适配AlphaLens库,参考2020年教材代码,但因库版本更新需要修改代码。目前卡在DateTime索引对齐问题上,反复出现时区相关错误,多次验证时区兼容性仍无法解决,恳请提供测试建议。
运行代码
import warnings warnings.filterwarnings('ignore') %matplotlib inline import re from alphalens.utils import get_clean_factor_and_forward_returns from alphalens.performance import * from alphalens.plotting import * from alphalens.tears import * import seaborn as sns import matplotlib.pyplot as plt sns.set_style('whitegrid') # 引用另一文件中已验证的数据 performance = pd.read_pickle('single_factor.pickle') prices = pd.concat([df.to_frame(d) for d, df in performance.prices.dropna().items()],axis=1).T prices.columns = [re.findall(r"\[(.+)\]", str(col))[0] for col in prices.columns] prices.index = prices.index.normalize() prices.index = prices.index.tz_convert('UTC') prices.columns = pd.MultiIndex.from_tuples([(col, '') for col in prices.columns]) prices = prices.stack(0) factor_data = pd.concat([df.to_frame(d) for d, df in performance.factor_data.dropna().items()],axis=1).T factor_data.columns = [re.findall(r"\[(.+)\]", str(col))[0] for col in factor_data.columns] factor_data.index = factor_data.index.normalize() factor_data.index = factor_data.index.tz_convert('UTC') factor_data.columns = pd.MultiIndex.from_tuples([(col, '') for col in factor_data.columns]) factor_data = factor_data.stack(0) factor_data.index.names = ['date', 'asset'] prices.index.names = ['date', 'asset'] with pd.HDFStore('PATH/assets.h5') as store: sp500 = store['sp500/stooq'].close sp500 = sp500.resample('D').ffill().tz_localize('utc').filter(prices.index.get_level_values(0)) factor_data.index = factor_data.index.set_levels([factor_data.index.levels[0].tz_convert('UTC')], level=['date']) prices.index = prices.index.set_levels([prices.index.levels[0].tz_convert('UTC')], level=['date']) HOLDING_PERIODS = (5, 10, 21, 42) QUANTILES = 5 # 验证factor_data为带MultiIndex的DataFrame assert isinstance(factor_data, pd.DataFrame) assert isinstance(factor_data.index, pd.MultiIndex) # 验证prices为DataFrame assert isinstance(prices, pd.DataFrame) # 验证HOLDING_PERIODS为元组 assert isinstance(HOLDING_PERIODS, tuple) # 验证QUANTILES为整数 assert isinstance(QUANTILES, int) alphalens_data = get_clean_factor_and_forward_returns(factor=factor_data, prices=prices, periods=HOLDING_PERIODS, quantiles=QUANTILES)
报错信息
AttributeError Traceback (most recent call last) Cell In[40], line 1 ----> 1 alphalens_data = get_clean_factor_and_forward_returns(factor=factor_data, 2 prices=prices, 3 periods=HOLDING_PERIODS, 4 quantiles=QUANTILES) File ~/.python/current/lib/python3.10/site-packages/alphalens/utils.py:827, in get_clean_factor_and_forward_returns(factor, prices, groupby, binning_by_group, quantiles, bins, periods, filter_zscore, groupby_labels, max_loss, zero_aware, cumulative_returns) 666 def get_clean_factor_and_forward_returns(factor, 667 prices, 668 groupby=None, (...) 676 zero_aware=False, 677 cumulative_returns=True): 678 """ 679 Formats the factor data, pricing data, and group mappings into a DataFrame 680 that contains aligned MultiIndex indices of timestamp and asset. The (...) 825 For use when forward returns are already available. 826 """ --> 827 forward_returns = compute_forward_returns( 828 factor, 829 prices, 830 periods, ... 266 "the pandas methods tz_localize and " 267 "tz_convert.") 269 freq = infer_trading_calendar(factor_dateindex, prices.index) AttributeError: 'MultiIndex' object has no attribute 'tz'
补充说明
可逐行运行代码并通过VSCode数据查看器查看prices和factor_data的变化,已保留各步骤的时区格式截图。
内容的提问来源于stack exchange,提问作者LetsGetTr0pical
相关产品推荐
相关产品推荐

