#pandas #interpolation
#pandas #интерполяция
Вопрос:
Я пытаюсь интерполировать некоторые данные, содержащие NaN. Я хотел бы заполнить 1-3 последовательных NaN, но я не могу понять, как это сделать с помощью pd.interpolate()
data_chunk = np.array([np.nan, np.nan, np.nan, 4, 5, np.nan, np.nan, np.nan, np.nan, 10, np.nan, np.nan, np.nan, 14])
data_chunk = pd.DataFrame(data_chunk)[0]
print(data_chunk)
print(data_chunk.interpolate(method='linear', limit_direction='both', limit=3, limit_area='inside'))
Исходные данные:
0 NaN
1 NaN
2 NaN
3 4.0
4 5.0
5 NaN
6 NaN
7 NaN
8 NaN
9 10.0
10 NaN
11 NaN
12 NaN
13 14.0
Попытка интерполяции:
0 NaN
1 NaN
2 NaN
3 4.0
4 5.0
5 6.0
6 7.0
7 8.0
8 9.0
9 10.0
10 11.0
11 12.0
12 13.0
13 14.0
Ожидаемый результат:
0 NaN
1 NaN
2 NaN
3 4.0
4 5.0
5 NaN
6 NaN
7 NaN
8 NaN
9 10.0
10 11.0
11 12.0
12 13.0
13 14.0
Любая помощь будет оценена по достоинству 🙂
Ответ №1:
Создайте логическую маску, чтобы увидеть, какие NA-groups
из них имеют менее 4 последовательных NA's
.
mask = (data_chunk.notnull() != data_chunk.shift().notnull()).cumsum().reset_index().groupby(0).transform('count') < 4
Выберите интерполированные значения, если mask == True
и в противном случае сохраните исходные значения.
pd.concat([interpolated[mask.values[:,0] ==True], data_chunk[mask.values[:,0] == False]]).sort_index()
Комментарии:
1. Спасибо, это было то, чего я боялся. Я надеялся, что просто не понимаю, как правильно использовать pd.interpolate. Странно, что это не является частью функции.
2. Я согласен, было бы неплохо иметь возможность указать ограничение на добавление, которое делает эту работу