2019-01-02的错误是由于600270.XSHG在18年12月退市,但聚宽1月份的中证500成分股中没有删除。
在下面的计算中添加了几行代码,能运行通过。
for d in date_list[:-1]:
d = str(d)[:10]
print('正在计算{}...'.format(d))
#获取因子暴露
factor_df = factor_data_y_dict[d]
x = factor_df.iloc[:,:-2]
r = factor_df['pct_'].values
pool = factor_df.index
# print('pool=', pool)
#计算市值平方根占比
get_size = get_fundamentals(query(valuation.code,valuation.market_cap).filter(valuation.code.in_(pool)),date=d)
get_size.index = get_size['code'].values
get_size['l_size'] = np.sqrt(get_size['market_cap'])
get_size['w'] = get_size['l_size']/sum(get_size['l_size'])
W = (get_size['w'].values).reshape(len(get_size),1)
**# 处理2019-01-02的出错
lp = pool.tolist()
lg = get_size['code'].tolist()
if len(lp) > len(lg): # 存在退市股票仍在指数成份股中,从估值df中删除
lt = [x for x in lp if x not in lg]
print('删除无效成份股:', lt[0])
factor_df = factor_df.drop(index=lt[0])
x = factor_df.iloc[:,:-2]
r = factor_df['pct_'].values
pool = factor_df.index
**