我希望能够在pandas系列中填充缺失值,如果连续的NAN少于3个。
有缺失值的原始系列:
s=pd.Series(pd.np.random.randn(20))
s[[1,3,5,7,12,13,14,15, 18]]=pd.np.nan
提供:
0 0.444025
1 NaN
2 0.631753
3 NaN
4 -0.577121
5 NaN
6 1.299953
7 NaN
8 -0.252173
9 0.287641
10 0.941953
11 -1.624728
12 NaN
13 NaN
14 NaN
15 NaN
16 0.998952
17 0.195698
18 NaN
19 -0.788995
但是,使用pandas.fillna()函数并设置限制只会填充指定数量的值(而不是连续NaN的数量,这是预期的行为):
s.fillna(value=0, limit=3) #Fails to fill values at position 7 and forward
期望的输出将在位置1、3、5、7和18处用0填充NAN。它将保留12-15位置上一系列4个NaN。
文档和其他SO帖子均未解决此问题(例如这里)。文档似乎暗示此限制将在连续的NAN上起作用,而不是将要填充的整个数据集中的数量。谢谢!
long_nan_gaps= s.index[s.shift(1).isnull() & s.shift(-1).isnull() & s.isnull()]
存储所有长的NAN间隔的位置,然后将所有NAN填充为0,在最后恢复保存的位置为NAN。感谢提供多种解决方案; 只是想知道下面提出的解决方案是否比我自己想出来的更好(我认为自己想出来的太丑陋/混乱)。 - EHB