From c47917aa5340f291cae663e13bb31351cc4a5cd5 Mon Sep 17 00:00:00 2001 From: David Schaefer <david.schaefer@ufz.de> Date: Wed, 15 Mar 2023 17:08:51 +0100 Subject: [PATCH] interpol-options --- CHANGELOG.md | 1 + saqc/funcs/interpolation.py | 2 +- saqc/funcs/resampling.py | 30 ++++++++++++++++++++++++------ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d348a4b5..d1768c3cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ SPDX-License-Identifier: GPL-3.0-or-later ### Added - Methods `logicalAnd` and `logicalOr` - `Flags` supports slicing and column selection with `list` or a `pd.Index`. +- added option `limit` to functions `interpolate` and `linear`. ### Changed ### Removed ### Fixed diff --git a/saqc/funcs/interpolation.py b/saqc/funcs/interpolation.py index 9def348d0..f4465f9c9 100644 --- a/saqc/funcs/interpolation.py +++ b/saqc/funcs/interpolation.py @@ -287,7 +287,7 @@ class InterpolationMixin: freq: str, method: _SUPPORTED_METHODS, order: int = 2, - limit: int | None = 2, + limit: int | str | None = 2, extrapolate: Literal["forward", "backward", "both"] = None, **kwargs, ) -> "SaQC": diff --git a/saqc/funcs/resampling.py b/saqc/funcs/resampling.py index ebc02bd4b..4a792cae1 100644 --- a/saqc/funcs/resampling.py +++ b/saqc/funcs/resampling.py @@ -40,6 +40,7 @@ class ResamplingMixin: self: "SaQC", field: str, freq: str, + limit: int | str | None = None, **kwargs, ) -> "SaQC": """ @@ -62,21 +63,30 @@ class ResamplingMixin: freq : str An offset string. The frequency of the grid you want to interpolate your data at. + limit : int or str, optional + Upper limit of missing values (with respect to `freq`) to fill. The limit can either be expressed + as the number of consecutive missing values (integer) or temporal extension of the gaps to be filled + (Offset String). + If `None` is passed, no Limit is set. + Returns ------- saqc.SaQC """ - reserved = ["method", "order", "limit", "downgrade"] + reserved = ["method", "order", "downgrade"] kwargs = filterKwargs(kwargs, reserved) - return self.interpolateIndex(field, freq, "time", **kwargs) + return self.interpolateIndex( + field=field, freq=freq, method="time", limit=limit, **kwargs + ) @register(mask=["field"], demask=[], squeeze=[]) def interpolate( self: "SaQC", field: str, freq: str, - method: _SUPPORTED_METHODS, + method: _SUPPORTED_METHODS = "linear", order: int = 1, + limit: int | str | None = None, **kwargs, ) -> "SaQC": """ @@ -106,20 +116,28 @@ class ResamplingMixin: An offset string. The frequency of the grid you want to interpolate your data at. method : {"linear", "time", "nearest", "zero", "slinear", "quadratic", "cubic", "spline", "barycentric", - "polynomial", "krogh", "piecewise_polynomial", "spline", "pchip", "akima"} + "polynomial", "krogh", "piecewise_polynomial", "spline", "pchip", "akima"}, default "linear" The interpolation method you want to apply. order : int, default 1 If your selected interpolation method can be performed at different *orders* - here you pass the desired order. + limit : int or str, optional + Upper limit of missing values (with respect to `freq`) to fill. The limit can either be expressed + as the number of consecutive missing values (integer) or temporal extension of the gaps to be filled + (Offset String). + If `None` is passed, no Limit is set. + Returns ------- saqc.SaQC """ - reserved = ["limit", "downgrade"] + reserved = ["downgrade"] kwargs = filterKwargs(kwargs, reserved) - return self.interpolateIndex(field, freq, method=method, order=order, **kwargs) + return self.interpolateIndex( + field=field, freq=freq, method=method, limit=limit, order=order, **kwargs + ) @register(mask=["field"], demask=[], squeeze=[]) def shift( -- GitLab