pandas.core.resample.Resampler.interpolate#
-
окончательный Resampler.интерполировать(method='linear', *, axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=
, **kwargs)[источник]# Интерполировать значения между целевыми временными метками в соответствии с различными методами.
Исходный индекс сначала переиндексируется до целевых меток времени (см.
core.resample.Resampler.asfreq()), тогда интерполяцияNaNзначения черезDataFrame.interpolate()происходит.- Параметры:
- метод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``необязательный
Аргументы ключевых слов для передачи интерполирующей функции.
- Возвращает:
- 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.