pandas.DataFrame.interpolate#

DataFrame.интерполировать(method='linear', *, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=, **kwargs)[источник]#

Заполнить значения NaN с помощью метода интерполяции.

Обратите внимание, что только method='linear' поддерживается для DataFrame/Series с MultiIndex.

Параметры:
методstr, по умолчанию 'linear'

Метод интерполяции для использования. Один из:

  • ‘linear’: Игнорировать индекс и рассматривать значения как равноудаленные. Это единственный метод, поддерживаемый для MultiIndexes.

  • 'time': Работает с данными дневного и более высокого разрешения для интерполяции заданной длины интервала.

  • 'index', 'values': использовать фактические числовые значения индекса.

  • 'pad': Заполнить NaN существующими значениями.

  • 'nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'barycentric', 'polynomial': Передаётся в scipy.interpolate.interp1d, тогда как 'spline' передается в scipy.interpolate.UnivariateSpline. Эти методы используют численные значения индекса. И 'polynomial', и 'spline' требуют, чтобы вы также указали порядок (int), например. df.interpolate(method='polynomial', order=5). Обратите внимание, что slinear метод в Pandas относится к Scipy первого порядка сплайн вместо порядка первого порядка Pandas сплайн.

  • ‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’: Обёртки вокруг методов интерполяции SciPy с аналогичными названиями. См. Примечания.

  • ‘from_derivatives’: Относится к scipy.interpolate.BPoly.from_derivatives.

ось{{0 или ‘index’, 1 или ‘columns’, None}}, по умолчанию None

Ось для интерполяции. Для Series этот параметр не используется и по умолчанию равен 0.

limitint, необязательный

Максимальное количество последовательных NaN для заполнения. Должно быть больше 0.

inplacebool, по умолчанию False

Обновите данные на месте, если возможно.

limit_direction{{‘forward’, ‘backward’, ‘both’}}, Optional

Последовательные значения NaN будут заполнены в этом направлении.

Если указан limit:
  • Если ‘method’ — ‘pad’ или ‘ffill’, ‘limit_direction’ должен быть ‘forward’.

  • Если 'method' равен 'backfill' или 'bfill', 'limit_direction' должен быть 'backwards'.

Если 'limit' не указан:
  • Если 'method' равен 'backfill' или 'bfill', по умолчанию используется 'backward'

  • иначе по умолчанию 'forward'

вызывает ValueError, если limit_direction равно 'forward' или 'both' и

метод - 'backfill' или 'bfill'.

вызывает ValueError, если limit_direction является 'backward' или 'both' и

метод 'pad' или 'ffill'.

limit_area{{None, 'inside', 'outside'}}, по умолчанию None

Если указан limit, последовательные значения NaN будут заполнены с этим ограничением.

  • None: Нет ограничений на заполнение.

  • ‘inside’: Заполнять только NaN, окруженные допустимыми значениями (интерполяция).

  • ‘outside’: Заполнять только NaN за пределами допустимых значений (экстраполяция).

downcastнеобязательно, 'infer' или None, по умолчанию None

Понизить типы данных, если возможно.

Устарело с версии 2.1.0.

``**kwargs``необязательный

Аргументы ключевых слов для передачи интерполирующей функции.

Возвращает:
Series или DataFrame или None

Возвращает тот же тип объекта, что и вызывающий, интерполированный в некоторых или всех NaN значения или None, если inplace=True.

Смотрите также

fillna

Заполнение пропущенных значений с использованием различных методов.

scipy.interpolate.Akima1DInterpolator

Кусочно-кубические полиномы (интерполятор Акимы).

scipy.interpolate.BPoly.from_derivatives

Кусочно-полиномиальная функция в базисе Бернштейна.

scipy.interpolate.interp1d

Интерполяция одномерной функции.

scipy.interpolate.KroghInterpolator

Интерполяция полинома (интерполятор Крога).

scipy.interpolate.PchipInterpolator

PCHIP 1-d монотонная кубическая интерполяция.

scipy.interpolate.CubicSpline

Кубический сплайн-интерполятор данных.

Примечания

Методы 'krogh', 'piecewise_polynomial', 'spline', 'pchip' и 'akima' являются обёртками вокруг соответствующих реализаций SciPy с похожими названиями. Они используют фактические числовые значения индекса. Для получения дополнительной информации об их поведении см. Документация SciPy.

Примеры

Заполнение NaN в Series с помощью линейной интерполяции.

>>> s = pd.Series([0, 1, np.nan, 3])
>>> s
0    0.0
1    1.0
2    NaN
3    3.0
dtype: float64
>>> s.interpolate()
0    0.0
1    1.0
2    2.0
3    3.0
dtype: float64

Заполнение NaN в Series с помощью полиномиальной интерполяции или сплайнов: Оба метода 'polynomial' и 'spline' требуют, чтобы вы также указали order (int).

>>> s = pd.Series([0, 2, np.nan, 8])
>>> s.interpolate(method='polynomial', order=2)
0    0.000000
1    2.000000
2    4.666667
3    8.000000
dtype: float64

Заполните DataFrame вперед (то есть вниз) по каждому столбцу с использованием линейной интерполяции.

Обратите внимание, как последняя запись в столбце ‘a’ интерполируется иначе, потому что после неё нет записи для использования в интерполяции. Обратите внимание, как первая запись в столбце ‘b’ остаётся NaN, потому что нет записи перед ней для использования в интерполяции.

>>> df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
...                    (np.nan, 2.0, np.nan, np.nan),
...                    (2.0, 3.0, np.nan, 9.0),
...                    (np.nan, 4.0, -4.0, 16.0)],
...                   columns=list('abcd'))
>>> df
     a    b    c     d
0  0.0  NaN -1.0   1.0
1  NaN  2.0  NaN   NaN
2  2.0  3.0  NaN   9.0
3  NaN  4.0 -4.0  16.0
>>> df.interpolate(method='linear', limit_direction='forward', axis=0)
     a    b    c     d
0  0.0  NaN -1.0   1.0
1  1.0  2.0 -2.0   5.0
2  2.0  3.0 -3.0   9.0
3  2.0  4.0 -4.0  16.0

Используя полиномиальную интерполяцию.

>>> df['d'].interpolate(method='polynomial', order=2)
0     1.0
1     4.0
2     9.0
3    16.0
Name: d, dtype: float64