refactor: replace eval() with helper function for numeric filtering

This commit is contained in:
jonasgaudian
2026-02-21 03:00:39 +01:00
parent f1c1dbb926
commit 3da664c5e1

View File

@@ -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!* ")