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

Pandas计算Close列滚动收益率执行dropna后返回空DataFrame问题

问题根因

你的代码返回空DataFrame由两个错误导致:

  • dropna(1)等价于dropna(axis=1),逻辑是删除所有存在空值的列。pct_change(periods=wind)计算时,前wind行必然为空,因此Close列会被判定为存在空值直接被删除,最终得到无列的空表。
  • 你的日期索引为倒序(最新日期在最上方),直接计算会得到反向的变动率,不符合收益率计算逻辑。
正确实现

先将日期索引调整为从旧到新的正序,再计算周期百分比变化,最后按行删除带空值的记录即可:

# 按日期升序排序,保证收益率计算方向正确
closing_data = closing_data.sort_index(ascending=True)
# 计算wind周期滚动收益率,按行删除空值
rolling_return = closing_data["Close"].pct_change(periods=wind).dropna()

# 若需要保留整个DataFrame结构而非单独的Close序列,使用如下写法
# rolling_return_df = closing_data.pct_change(periods=wind).dropna(axis=0)
计算逻辑说明

pct_change(periods=wind)的计算规则为(当前值 - 前wind期值)/前wind期值,和你需要的滚动窗口收益率逻辑完全一致,不需要额外调用rolling类方法。以wind=2为例,排序后2022-05-19的收益率为(137.350006 - 149.240005)/149.240005 ≈ -7.97%,结果符合预期。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:06:31