Skip to content
Snippets Groups Projects
Commit 92f05333 authored by Peter Lünenschloß's avatar Peter Lünenschloß
Browse files

fixed the try-to-access-flags-as-Dataframe-while-its-a-series bug

parent 26c1649c
No related branches found
No related tags found
No related merge requests found
...@@ -395,7 +395,10 @@ def flagSoilMoistureBySpikeDetection(data, flags, field, flagger, filter_window_ ...@@ -395,7 +395,10 @@ def flagSoilMoistureBySpikeDetection(data, flags, field, flagger, filter_window_
spikes[spike] = False spikes[spike] = False
spikes = spikes[spikes == True] spikes = spikes[spikes == True]
flags.loc[spikes.index, field] = flagger.setFlag(flags.loc[spikes.index, field], **kwargs) if isinstance(flags, pd.Series):
flags.loc[spikes.index, field] = flagger.setFlag(flags.loc[spikes.index, field], **kwargs)
else:
flags.loc[spikes.index] = flagger.setFlag(flags.loc[spikes.index], **kwargs)
return data, flags return data, flags
...@@ -490,14 +493,18 @@ def flagSoilMoistureByBreakDetection(data, flags, field, flagger, filter_window_ ...@@ -490,14 +493,18 @@ def flagSoilMoistureByBreakDetection(data, flags, field, flagger, filter_window_
breaks[brake] = False breaks[brake] = False
breaks = breaks[breaks == True] breaks = breaks[breaks == True]
flags.loc[breaks.index, field] = flagger.setFlag(flags.loc[breaks.index, field], **kwargs) if isinstance(flags, pd,Series):
flags.loc[breaks.index] = flagger.setFlag(flags.loc[breaks.index], **kwargs)
else:
flags.loc[breaks.index, field] = flagger.setFlag(flags.loc[breaks.index, field], **kwargs)
return data, flags return data, flags
def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_window_min='12h', def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_window_min='12h',
plateau_var_limit=0.0005, rainfall_window='12h', filter_window_size='3h', plateau_var_limit=0.0005, rainfall_window='12h', filter_window_size='3h',
i_start_infimum=0.0025, i_end_supremum=0, data_max_tolerance=0.95): i_start_infimum=0.0025, i_end_supremum=0, data_max_tolerance=0.95, **kwargs):
"""Function: """Function:
:param data: The pandas dataframe holding the data-to-be flagged. :param data: The pandas dataframe holding the data-to-be flagged.
Data must be indexed by a datetime series and be harmonized onto a Data must be indexed by a datetime series and be harmonized onto a
time raster with seconds precision (skips allowed). time raster with seconds precision (skips allowed).
...@@ -516,8 +523,8 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi ...@@ -516,8 +523,8 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi
# get data max # get data max
data_max = dataseries.max() data_max = dataseries.max()
# identify minimal plateaus: # identify minimal plateaus:
plateaus = dataseries.rolling(window=plateau_window_min).apply(lambda x: x.var() < plateau_var_limit, raw=False)\ plateaus = dataseries.rolling(window=plateau_window_min).apply(lambda x: x.var() > plateau_var_limit, raw=False).astype(bool)
.astype(bool) plateaus = ~plateaus
# are there any candidates for beeing flagged plateau-ish # are there any candidates for beeing flagged plateau-ish
if plateaus.sum() == 0: if plateaus.sum() == 0:
...@@ -536,7 +543,7 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi ...@@ -536,7 +543,7 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi
plateaus = plateaus['interval_nr'] plateaus = plateaus['interval_nr']
invalids = pd.Series([]) invalids = pd.Series([])
# loop through the intervals to be checked: # loop through the intervals to be checked:
for interval_2_check in range(1, plateaus.max()): for interval_2_check in range(1, plateaus.max()+1):
# how big is the interval? # how big is the interval?
interval_delimeter = plateaus[plateaus==interval_2_check].index[-1] - \ interval_delimeter = plateaus[plateaus==interval_2_check].index[-1] - \
plateaus[plateaus==interval_2_check].index[0] plateaus[plateaus==interval_2_check].index[0]
...@@ -597,4 +604,9 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi ...@@ -597,4 +604,9 @@ def flagSoilMoistureByConstantsDetection(data, flags, field, flagger, plateau_wi
if potential_invalid.mean() > data_max*data_max_tolerance: if potential_invalid.mean() > data_max*data_max_tolerance:
invalids = pd.concat([invalids, potential_invalid]) invalids = pd.concat([invalids, potential_invalid])
if isinstance(flags, pd.Series):
flags.loc[invalids.index] = flagger.setFlag(flags.loc[invalids.index], **kwargs)
else:
flags.loc[invalids.index, field] = flagger.setFlag(flags.loc[invalids.index, field], **kwargs)
return data, flags
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment