为何Pandas的nearest插值方法在连续NaN值场景下不生效?
问题分析与解决方法
为什么第一个场景插值不生效?
pd.Series.interpolate(method='nearest')默认只会填充已有非NaN值之间的缺失值,或者按默认的limit_direction='forward'从左向右向后续NaN延伸填充。但你的第一个Series开头全是NaN,左边没有任何非NaN锚点值,右边第一个非NaN值是0,默认逻辑不会主动从右向左填充开头的NaN,所以插值没生效。
而第二个Series开头有1这个非NaN值,中间的NaN可以基于左右已知值(左边的1、右边的0)找到最近值,所以插值正常工作。
解决方法:设置limit_direction='both'
给interpolate添加limit_direction='both'参数,让它可以从任意方向(包括从右向左)寻找最近的非NaN值填充缺失值:
import pandas as pd import numpy as np s = pd.Series([np.nan, np.nan, np.nan, 0, 1, 2, 3]) # 添加limit_direction参数 s_filled = s.interpolate(method='nearest', limit_direction='both') print(s_filled)
输出结果:
0 0.0 1 0.0 2 0.0 3 0.0 4 1.0 5 2.0 6 3.0 dtype: float64
补充说明
如果需要更精细化控制(比如限制填充的NaN数量),可以额外搭配limit参数,比如limit=2会只填充开头的2个NaN,剩下的一个保持原样。不过针对当前场景,limit_direction='both'已经能满足需求。
内容的提问来源于stack exchange,提问作者Avto Abashishvili
相关产品推荐
相关产品推荐

