Мне трудно предотвратить pd.DataFrame.interpolate (method = 'index') от экстраполяции .
В частности:
>>> df = pd.DataFrame({1: range(1, 5), 2: range(2, 6), 3 : range(3, 7)}, index = [1, 2, 3, 4])
>>> df = df.reindex(range(6)).reindex(range(5), axis=1)
>>> df.iloc[3, 2] = np.nan
>>> df
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN 1.0 2.0 3.0 NaN
2 NaN 2.0 3.0 4.0 NaN
3 NaN 3.0 NaN 5.0 NaN
4 NaN 4.0 5.0 6.0 NaN
5 NaN NaN NaN NaN NaN
Итак, df
- это просто блок данных, окруженный NaN
с внутренней отсутствующей точкой в iloc[3, 2]
. Теперь, когда я применяю .interpolate()
(по горизонтальной или вертикальной оси), моя цель состоит в том, чтобы заполнить ТОЛЬКО эту внутреннюю точку, не трогая окружающие NaN
. Но как-то не получается заставить его работать.
Я пробовал:
>>> df.interpolate(method='index', axis=0, limit_area='inside')
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN 1.0 2.0 3.0 NaN
2 NaN 2.0 3.0 4.0 NaN
3 NaN 3.0 4.0 5.0 NaN
4 NaN 4.0 5.0 6.0 NaN
5 NaN 4.0 5.0 6.0 NaN
Обратите внимание, последняя строка заполнилась, что нежелательно. (кстати, я бы подумал, что значение заполнения должно быть линейной экстраполяцией на основе индекса, но оно просто дополняет последнее значение, что крайне нежелательно.)
Я также пробовал комбинацию limit
и limit_direction
но безрезультатно.
Какой параметр аргумента должен быть правильным для получения желаемого результата? Надеюсь, без искаженной маскировки (но это тоже сработает). Спасибо.