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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:05:09