diff --git a/saqc/lib/plotting.py b/saqc/lib/plotting.py index 34b0eb7c440dec61862356535590806bc212e819..c03670b5cbf346f5c39904399be9227d07787ec8 100644 --- a/saqc/lib/plotting.py +++ b/saqc/lib/plotting.py @@ -406,14 +406,14 @@ def _getDataFromVar( All infos are projected to the data locations. """ var = varname - assert var in flagger_new.flags - flags_new: pd.Series = flagger_new.flags[var] + assert var in flagger_new.columns + flags_new: pd.Series = flagger_new[var] plotdict = _getPlotdict(data_new, flags_new, flagger_new, var) ref_plotdict = None # prepare flags - if flagger_old is not None and var in flagger_old.flags: - flags_old = flagger_old.flags[var] + if flagger_old is not None and var in flagger_old.columns: + flags_old = flagger_old[var] ref_plotdict = _getPlotdict(data_old, flags_old, flagger_old, var) # check flags-index changes: @@ -428,12 +428,12 @@ def _getDataFromVar( # calculate old-flags and update flags, like BADs, # to show only freshly new set values - unflagged = plotdict["unflagged"] + unflagged = plotdict.get("unflagged", pd.Series(dtype=float)) diff = unchanged.index.difference(unflagged.index) plotdict["old-flags"] = unchanged.loc[diff] for field in ["bad", "suspicious", "good"]: - data = plotdict[field] - isect = changed.index & data.index + data = plotdict.get(field, pd.Series(dtype=float)) + isect = changed.index.intersection(data.index) plotdict[field] = data.loc[isect] return plotdict, ref_plotdict @@ -540,7 +540,7 @@ def _splitOldAndNew(old: pd.Series, new: pd.Series): of locations seen from new. This means, the rest marks locations, that are present(!) in new, but its data differs from old. """ - idx = old.index & new.index + idx = old.index.intersection(new.index) both_nan = old.loc[idx].isna() & new.loc[idx].isna() mask = (new.loc[idx] == old[idx]) | both_nan old_idx = mask[mask].index @@ -553,12 +553,10 @@ def _splitByFlag(flags: pd.Series, flagger, var: str): Splits flags in the five distinct bins: GOOD, SUSPICIOUS, BAD, UNFLAGGED and NaNs. """ n = flags.isna() - loc = flags.dropna().index - g = flagger.isFlagged(field=var, loc=loc, flag=GOOD, comparator="==") - b = flagger.isFlagged(field=var, loc=loc, flag=BAD, comparator="==") - u = flagger.isFlagged(field=var, loc=loc, flag=UNFLAGGED, comparator="==") - s = flagger.isFlagged(field=var, loc=loc, flag=BAD, comparator="<") - s = flagger.isFlagged(field=var, loc=loc, flag=GOOD, comparator=">") & s + b = flags >= BAD + g = flags < UNFLAGGED + u = flags == UNFLAGGED + s = (flags > UNFLAGGED) & (flags < BAD) return g[g], s[s], b[b], u[u], n[n]