Я хочу заполнить отсутствующие значения в моей серии pandas, если имеется менее 3 последовательных NAN.
Исходная серия с пропущенными значениями:
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
Желаемый результат должен был бы заполнить NAN 0 в позициях 1,3,5,7 и 18. Это оставит серию из 4 NaN на месте в позициях 12-15.
В документации и других сообщениях по SO эта проблема не решена (например, здесь). Документация, похоже, подразумевает, что это ограничение будет работать для последовательных NAN, а не для общего # во всем наборе данных, который будет заполнен. Спасибо!
long_nan_gaps= s.index[s.shift(1).isnull() & s.shift(-1).isnull() & s.isnull()]
, затем заполнить ВСЕ NAN с помощью 0, а затем восстановить сохраненные местоположения в NAN после факта? Я ценю множество решений; просто интересно, лучше ли то, что вы предложили ниже, чем то, что я понял здесь для себя (что я считал слишком уродливым / сбивающим с толку). - person EHB   schedule 21.03.2018