如何让Pandas DataFrame连续0值时pct_change返回0而非NaN
解决DataFrame连续0时pct_change返回NaN的问题
可以用Pandas的向量化操作实现,完全不需要循环:
- 先构造示例DataFrame(模拟包含原始NaN和连续0的场景):
import pandas as pd df = pd.DataFrame({'col': [0, 0, 5, 5, None, 0, 0]})
- 计算原始百分比变化:
pct_result = df['col'].pct_change()
- 创建布尔掩码,定位当前行和上一行都是0的位置:
mask = (df['col'] == 0) & (df['col'].shift(1) == 0)
- 将掩码匹配到的位置的NaN替换为0,其他NaN保持不变:
pct_result = pct_result.mask(mask, 0)
最终得到的pct_result结果如下:
0 NaN 1 0.0 2 inf 3 0.0 4 NaN 5 NaN 6 0.0 Name: col, dtype: float64
这个方法完全遵循Pandas的向量化操作风格,效率远高于循环,同时精准处理了连续0的场景,不会误改原始数据中的其他NaN。
内容的提问来源于stack exchange,提问作者John Glen
相关产品推荐
相关产品推荐

