为何使用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
相关产品推荐
相关产品推荐

