refactor: replace eval() with helper function for numeric filtering
This commit is contained in:
@@ -145,16 +145,31 @@ def apply_filters(df: pd.DataFrame, pattern: Optional[str] = None, regex_column:
|
||||
operator = numeric_filter["operator"]
|
||||
value = numeric_filter["value"]
|
||||
|
||||
# Helper function to apply operator comparison safely
|
||||
def apply_operator(series, op, val):
|
||||
if op == ">":
|
||||
return series > val
|
||||
elif op == "<":
|
||||
return series < val
|
||||
elif op == ">=":
|
||||
return series >= val
|
||||
elif op == "<=":
|
||||
return series <= val
|
||||
elif op == "=":
|
||||
return series == val
|
||||
else:
|
||||
raise ValueError(f"Unbekannter Operator: {op}")
|
||||
|
||||
if column == "Alle Spalten":
|
||||
combined_mask = pd.Series([False] * len(filtered_df), index=filtered_df.index)
|
||||
for col in filtered_df.columns:
|
||||
num_series = pd.to_numeric(filtered_df[col], errors='coerce')
|
||||
col_mask = eval(f"num_series {operator} value")
|
||||
col_mask = apply_operator(num_series, operator, value)
|
||||
combined_mask = combined_mask | col_mask
|
||||
filtered_df = filtered_df[combined_mask]
|
||||
else:
|
||||
num_series = pd.to_numeric(filtered_df[column], errors='coerce')
|
||||
filtered_df = filtered_df[eval(f"num_series {operator} value")]
|
||||
filtered_df = filtered_df[apply_operator(num_series, operator, value)]
|
||||
filters_applied.append("Numerisch")
|
||||
except Exception as e:
|
||||
return None, None, f"Fehler beim Anwenden des numerischen Filters: {e}"
|
||||
@@ -671,7 +686,6 @@ def main():
|
||||
# Speicherverbrauch
|
||||
memory_mb = st.session_state.df.memory_usage(deep=True).sum() / 1024 / 1024
|
||||
st.caption(f"Speicher: {memory_mb:.1f} MB")
|
||||
st.caption("*Version 0.1* ")
|
||||
|
||||
else:
|
||||
st.info("Lade eine Excel-Datei hoch, um Statistiken anzuzeigen.")
|
||||
@@ -684,6 +698,7 @@ def main():
|
||||
3. "Filter anwenden" klicken
|
||||
4. Ergebnisse herunterladen
|
||||
""")
|
||||
st.caption("*Version 0.1* ")
|
||||
|
||||
st.title("Excel Filter Tool")
|
||||
st.markdown("*Temporäre Session: Es werden keine Daten und Einstellungen gespeichert!* ")
|
||||
|
||||
Reference in New Issue
Block a user