diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d348a4b570cef2084860d4279e052509e3ca33b..d1768c3cfdce189e0bc1f300dc43665c8a941184 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 9def348d0594a7528536675ff33a3e18aa5e459f..f4465f9c9da4b831e4effa1e39d1790e0d97f755 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 ebc02bd4bf0ad1e890050a42138c8c36fcefa253..4a792cae1f3a30738906f298fa540a888eb39e99 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(