pandas.core.resample.Resampler.interpolate
- finalResampler.interpolate(method='linear', *, axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=_NoDefault.no_default, **kwargs)[source]
-
Интерполирует значения между целевыми временными отметками в соответствии с различными методами.
Исходный индекс сначала переиндексируется на целевые временные отметки (см.
core.resample.Resampler.asfreq()), затем происходит интерполяцияNaNзначений черезDataFrame.interpolate().- Параметры:
-
- method:строка, по умолчанию ‘linear’
-
Методика интерполяции. Один из:
‘linear’: Игнорирует индекс и рассматривает значения как равноотстоящие. Это единственный метод, поддерживаемый в MultiIndexes.
‘time’: Работает с данными с суточным и более высоким разрешением для интерполяции заданного интервала.
‘index’, ‘values’: использовать фактические числовые значения индекса.
‘pad’: Заполняет NaN значения с использованием существующих.
‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial’: Передаётся в scipy.interpolate.interp1d, тогда как ‘spline’ передаётся в scipy.interpolate.UnivariateSpline. Эти методы используют числовые значения индекса. Оба ‘polynomial’ и ‘spline’ требуют, чтобы вы также указали order (целое число), например
df.interpolate(method='polynomial', order=5). Обратите внимание, что метод slinear в Pandas относится к spline первого порядка SciPy вместо spline первого порядка Pandas.‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’: Обёртки вокруг методов интерполяции SciPy с аналогичными именами. См. Примечания.
‘from_derivatives’: Ссылается на scipy.interpolate.BPoly.from_derivatives.
- axis:{{0 или ‘index’, 1 или ‘columns’, None}}, по умолчанию None
-
Ось для интерполяции. Для Series этот параметр не используется и по умолчанию равен 0.
- limit:целое число, необязательно
-
Максимальное количество последовательных NaN для заполнения. Должно быть больше 0.
- inplace:булево, по умолчанию False
-
Обновить данные на месте, если это возможно.
- limit_direction:{{‘forward’, ‘backward’, ‘both’}}, необязательно
-
Последовательные NaN будут заполнены в этом направлении.
- Если limit указан:
-
Если ‘method’ равен ‘pad’ или ‘ffill’, ‘limit_direction’ должен быть ‘forward’.
Если ‘method’ равен ‘backfill’ или ‘bfill’, ‘limit_direction’ должен быть ‘backward’.
- Если ‘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``:необязательно
-
Параметры ключевого слова для передачи в функцию интерполяции.
- Возвращает:
-
- DataFrame или Series
-
Интерполированные значения с указанной частотой.
См. также
core.resample.Resampler.asfreq-
Возврат значений с новой частотой, по сути, переиндексация.
DataFrame.interpolate-
Заполнение NaN значений с использованием метода интерполяции.
Примечания
Для частотных или неравномерных временных рядов со временными метками переиндексация, за которой следует интерполяция, может привести к потере информации, как показано в последнем примере.
Примеры
>>> start = "2023-03-01T07:00:00" >>> timesteps = pd.date_range(start, periods=5, freq="s") >>> series = pd.Series(data=[1, -1, 2, 1, 3], index=timesteps) >>> series 2023-03-01 07:00:00 1 2023-03-01 07:00:01 -1 2023-03-01 07:00:02 2 2023-03-01 07:00:03 1 2023-03-01 07:00:04 3 Freq: s, dtype: int64
Увеличьте частоту фрейма данных до 0.5 Гц, задав период времени в 2 секунды.
>>> series.resample("2s").interpolate("linear") 2023-03-01 07:00:00 1 2023-03-01 07:00:02 2 2023-03-01 07:00:04 3 Freq: 2s, dtype: int64Уменьшите частоту фрейма данных до 2 Гц, задав период времени в 500 миллисекунд.
>>> series.resample("500ms").interpolate("linear") 2023-03-01 07:00:00.000 1.0 2023-03-01 07:00:00.500 0.0 2023-03-01 07:00:01.000 -1.0 2023-03-01 07:00:01.500 0.5 2023-03-01 07:00:02.000 2.0 2023-03-01 07:00:02.500 1.5 2023-03-01 07:00:03.000 1.0 2023-03-01 07:00:03.500 2.0 2023-03-01 07:00:04.000 3.0 Freq: 500ms, dtype: float64Внутренняя переиндексация с
asfreq()перед интерполяцией приводит к интерполированному временнному ряду на основе переиндексированных временных отметок (якорей). Поскольку не все точки данных из исходного ряда становятся якорями, это может привести к вводящим в заблуждение результатам интерполяции, как показано в следующем примере:>>> series.resample("400ms").interpolate("linear") 2023-03-01 07:00:00.000 1.0 2023-03-01 07:00:00.400 1.2 2023-03-01 07:00:00.800 1.4 2023-03-01 07:00:01.200 1.6 2023-03-01 07:00:01.600 1.8 2023-03-01 07:00:02.000 2.0 2023-03-01 07:00:02.400 2.2 2023-03-01 07:00:02.800 2.4 2023-03-01 07:00:03.200 2.6 2023-03-01 07:00:03.600 2.8 2023-03-01 07:00:04.000 3.0 Freq: 400ms, dtype: float64Обратите внимание, что ряд ошибочно увеличивается между двумя якорями
07:00:00и07:00:02.
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.2.2/reference/api/pandas.core.resample.Resampler.interpolate.html