предотвратить экстраполяцию pandas .interpolate () - PullRequest
0 голосов
/ 08 мая 2020

Мне трудно предотвратить 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 но безрезультатно.

Какой параметр аргумента должен быть правильным для получения желаемого результата? Надеюсь, без искаженной маскировки (но это тоже сработает). Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Хорошо, оказывается, я запускаю это на Pandas 0,21, поэтому аргумент limit_area молча терпит неудачу. Похоже, начиная с версии 0.24 это исправлено. Дело закрыто.

...