From 2580c11cf6f4b9bbb68b46be2fa6b3038c4b521a Mon Sep 17 00:00:00 2001 From: Peter Luenenschloss <peter.luenenschloss@ufz.de> Date: Wed, 29 Apr 2020 11:13:41 +0200 Subject: [PATCH] some additional interpolation options --- saqc/funcs/proc_functions.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/saqc/funcs/proc_functions.py b/saqc/funcs/proc_functions.py index 61b8871fd..13097bbff 100644 --- a/saqc/funcs/proc_functions.py +++ b/saqc/funcs/proc_functions.py @@ -5,21 +5,34 @@ import pandas as pd import numpy as np from saqc.funcs.register import register from saqc.lib.ts_operators import interpolateNANs, validationTrafo -from saqc.lib.tools import composeFunction +from saqc.lib.tools import composeFunction, toSequence @register() def proc_interpolateMissing(data, field, flagger, method, inter_order=2, inter_limit=2, interpol_flag='UNFLAGGED', - downgrade_interpolation=False, return_chunk_bounds=False, **kwargs): + downgrade_interpolation=False, return_chunk_bounds=False, not_interpol_flags=None, **kwargs): inter_data = interpolateNANs(data[field], method, order=inter_order, inter_limit=inter_limit, downgrade_interpolation=downgrade_interpolation, return_chunk_bounds=return_chunk_bounds) interpolated = data[field].isna() & inter_data.notna() + if not_interpol_flags: + for f in toSequence(not_interpol_flags): + if f in ['BAD', 'UNFLAGGED', 'GOOD']: + f = getattr(flagger, interpol_flag) + is_flagged = flagger.isFlagged(flag=f)[field] + cond = is_flagged & interpolated + inter_data.mask(cond, np.nan, inplace=True) + interpolated &= inter_data.notna() + if interpol_flag: + if interpol_flag in ['BAD', 'UNFLAGGED', 'GOOD']: + interpol_flag = getattr(flagger, interpol_flag) flagger = flagger.setFlags(field, loc=interpolated[interpolated].index, force=True, - flag=getattr(flagger, interpol_flag), **kwargs) - return inter_data, flagger + flag=interpol_flag, **kwargs) + + data[field] = inter_data + return data, flagger @register() -- GitLab