diff --git a/saqc/core/register.py b/saqc/core/register.py index 2863f182556a0a0ca7cd2e0a20ae8c2f73e173b6..83c845e0abb27edfa93d9ef4ee16e3d32aa85a2b 100644 --- a/saqc/core/register.py +++ b/saqc/core/register.py @@ -171,13 +171,20 @@ class SaQCFunc(Func): return data_result, flagger_result def _maskData(self, data, flagger): + # TODO: this is heavily undertested to_mask = flagger.BAD if self.to_mask is None else self.to_mask mask = flagger.isFlagged(flag=to_mask, comparator='==') data = data.copy() - data[mask] = np.nan + for c in data.columns: + col_mask = mask[c].values + if np.any(col_mask): + col_data = data[c].values.astype(np.float64) + col_data[col_mask] = np.nan + data[c] = col_data return data def _unmaskData(self, data_old, flagger_old, data_new, flagger_new): + # TODO: this is heavily undertested to_mask = flagger_old.BAD if self.to_mask is None else self.to_mask mask_old = flagger_old.isFlagged(flag=to_mask, comparator="==") mask_new = flagger_new.isFlagged(flag=to_mask, comparator="==") @@ -190,8 +197,11 @@ class SaQCFunc(Func): if left.equals(right): # NOTE: Don't overwrite data, that was masked, but is not considered # flagged anymore and also respect newly set data on masked locations. - mask = mask_old[col] & mask_new[col] & data_new[col].isna() - data_new.loc[mask, col] = data_old.loc[mask, col] + mask = mask_old[col].values & mask_new[col].values & data_new[col].isna().values + if np.any(mask): + col_data = data_new[col].values + col_data[mask] = data_old[col].values[mask] + data_new[col] = col_data return data_new