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

为何使用ffill()后pandas的pct_change()仍报FutureWarning?

解决pandas pct_change()的矛盾FutureWarning问题

快速解决方法

方法一:用警告过滤器屏蔽矛盾提示

既然你已经提前用ffill()处理了缺失值,只需要临时屏蔽掉那个“默认fill_method即将弃用”的警告就行,代码如下:

import warnings

# 精准过滤掉pct_change的这个特定警告
with warnings.catch_warnings():
    warnings.filterwarnings(
        "ignore",
        category=FutureWarning,
        message="The default fill_method='pad' in Series.pct_change is deprecated"
    )
    sub_df[f"Δ {col}"] = sub_df[col].ffill().pct_change()

这么做既符合pandas未来的规范(提前处理缺失值,不让pct_change()内部做填充),又能消掉烦人的警告。

方法二:手动计算百分比变化(彻底绕开警告)

如果不想碰警告过滤,直接手动实现pct_change()的逻辑就行,结果完全一致,还不会有任何警告:

filled_col = sub_df[col].ffill()
sub_df[f"Δ {col}"] = filled_col / filled_col.shift(1) - 1

矛盾警告的原因

这是pandas版本迭代过渡时的小问题:

  • 当你调用ffill().pct_change()时,pandas的警告逻辑没检测到你已经提前填充了缺失值,还是触发了“默认fill_method即将弃用,建议提前ffill”的警告
  • 但如果你加fill_method=None,又会触发“fill_method参数本身即将被移除”的警告

属于过渡阶段的逻辑漏洞,后续的pandas版本(比如2.1及以上)已经修复了这个问题,升级版本也能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:35:05