From f203653a7ac3b0b1b587b7cfaf6d14f8042ffd2a Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Sun, 9 Mar 2025 14:58:08 +0100 Subject: [PATCH] fix: handling of missing value in `removeRows`/`removeRowsByColumn` --- src/safeds/data/tabular/containers/_table.py | 4 ++-- .../data/tabular/containers/_table/test_filter_rows.py | 6 ++++++ .../containers/_table/test_filter_rows_by_column.py | 7 +++++++ .../data/tabular/containers/_table/test_remove_rows.py | 6 ++++++ .../containers/_table/test_remove_rows_by_column.py | 7 +++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/safeds/data/tabular/containers/_table.py b/src/safeds/data/tabular/containers/_table.py index d56c10b39..6c66f4973 100644 --- a/src/safeds/data/tabular/containers/_table.py +++ b/src/safeds/data/tabular/containers/_table.py @@ -1529,7 +1529,7 @@ def remove_rows( mask = predicate(_LazyVectorizedRow(self)) return Table._from_polars_lazy_frame( - self._lazy_frame.filter(~mask._polars_expression), + self._lazy_frame.remove(mask._polars_expression), ) def remove_rows_by_column( @@ -1592,7 +1592,7 @@ def remove_rows_by_column( mask = predicate(_LazyCell(pl.col(name))) return Table._from_polars_lazy_frame( - self._lazy_frame.filter(~mask._polars_expression), + self._lazy_frame.remove(mask._polars_expression), ) def remove_rows_with_missing_values( diff --git a/tests/safeds/data/tabular/containers/_table/test_filter_rows.py b/tests/safeds/data/tabular/containers/_table/test_filter_rows.py index 61d474b02..2474aa190 100644 --- a/tests/safeds/data/tabular/containers/_table/test_filter_rows.py +++ b/tests/safeds/data/tabular/containers/_table/test_filter_rows.py @@ -33,6 +33,11 @@ lambda row: row["col1"] <= 2, Table({"col1": [1, 2]}), ), + ( + lambda: Table({"col1": [None]}), + lambda row: row["col1"] <= 2, + Table({"col1": []}), + ), ], ids=[ "empty", @@ -40,6 +45,7 @@ "no matches", "some matches", "only matches", + "None", ], ) class TestHappyPath: diff --git a/tests/safeds/data/tabular/containers/_table/test_filter_rows_by_column.py b/tests/safeds/data/tabular/containers/_table/test_filter_rows_by_column.py index 58fe61989..7140f6930 100644 --- a/tests/safeds/data/tabular/containers/_table/test_filter_rows_by_column.py +++ b/tests/safeds/data/tabular/containers/_table/test_filter_rows_by_column.py @@ -33,12 +33,19 @@ lambda cell: cell <= 2, Table({"col1": [1, 2], "col2": [-1, -2]}), ), + ( + lambda: Table({"col1": [None], "col2": [None]}), + "col1", + lambda cell: cell <= 2, + Table({"col1": [], "col2": []}), + ), ], ids=[ "no rows", "no matches", "some matches", "only matches", + "None", ], ) class TestHappyPath: diff --git a/tests/safeds/data/tabular/containers/_table/test_remove_rows.py b/tests/safeds/data/tabular/containers/_table/test_remove_rows.py index 8979bb22f..db9cabbfb 100644 --- a/tests/safeds/data/tabular/containers/_table/test_remove_rows.py +++ b/tests/safeds/data/tabular/containers/_table/test_remove_rows.py @@ -33,6 +33,11 @@ lambda row: row["col1"] <= 2, Table({"col1": []}), ), + ( + lambda: Table({"col1": [None]}), + lambda row: row["col1"] <= 2, + Table({"col1": [None]}), + ), ], ids=[ "empty", @@ -40,6 +45,7 @@ "no matches", "some matches", "only matches", + "None", ], ) class TestHappyPath: diff --git a/tests/safeds/data/tabular/containers/_table/test_remove_rows_by_column.py b/tests/safeds/data/tabular/containers/_table/test_remove_rows_by_column.py index c757cc7de..f27571e64 100644 --- a/tests/safeds/data/tabular/containers/_table/test_remove_rows_by_column.py +++ b/tests/safeds/data/tabular/containers/_table/test_remove_rows_by_column.py @@ -33,12 +33,19 @@ lambda cell: cell <= 2, Table({"col1": [], "col2": []}), ), + ( + lambda: Table({"col1": [None], "col2": [None]}), + "col1", + lambda cell: cell <= 2, + Table({"col1": [None], "col2": [None]}), + ), ], ids=[ "no rows", "no matches", "some matches", "only matches", + "None", ], ) class TestHappyPath: