求助:Pandas中行求和结果参与运算后生成全NaN数据框
问题原因与解决方案
你的问题出在pandas的运算对齐规则上:
- 左边的
(tickers.pct_change().rolling(20).std())是一个DataFrame,行索引为日期,列是4个ticker代码。 - 右边的
((tickers.pct_change().rolling(20).std()).sum(axis=1))是一个Series,索引为日期(与DataFrame的行索引一致),值是每行4个ticker波动率的总和。
当直接用/做除法时,pandas默认会尝试将Series的索引与DataFrame的列名对齐,但两者完全不匹配(Series索引是日期,DataFrame列是ticker),导致对齐失败,最终生成全NaN的结果。
修复代码
你可以用pandas的div()方法,明确指定按行索引对齐,让每行的每个波动率值除以该行的总和:
start_date = '1990-01-01' ticker_list = ['SPY', 'QQQ', 'IWM','GLD'] tickers = yf.download(ticker_list, start=start_date)['Close'].dropna() # 先计算一次滚动波动率,避免重复计算 rolling_vol = tickers.pct_change().rolling(20).std() ticker_vol_share = rolling_vol.div(rolling_vol.sum(axis=1), axis=0)
另外,把滚动波动率的计算单独提取出来,既提升代码效率,也能避免重复计算可能带来的潜在问题。
内容的提问来源于stack exchange,提问作者geaa
相关产品推荐
相关产品推荐

