diff --git a/crates/polars-ops/src/series/ops/to_dummies.rs b/crates/polars-ops/src/series/ops/to_dummies.rs index dfe3ba1a3ddf..eb2cf3a228c1 100644 --- a/crates/polars-ops/src/series/ops/to_dummies.rs +++ b/crates/polars-ops/src/series/ops/to_dummies.rs @@ -46,7 +46,8 @@ impl ToDummies for Series { }) .collect::>(); - Ok(unsafe { DataFrame::new_no_checks_height_from_first(sort_columns(columns)) }) + // SAFETY: `dummies_helper` functions preserve `self.len()` length + unsafe { DataFrame::new_no_length_checks(sort_columns(columns)) } } } diff --git a/py-polars/tests/unit/series/test_series.py b/py-polars/tests/unit/series/test_series.py index f1a858f62add..0ed478b9aa83 100644 --- a/py-polars/tests/unit/series/test_series.py +++ b/py-polars/tests/unit/series/test_series.py @@ -23,6 +23,7 @@ Unknown, ) from polars.exceptions import ( + DuplicateError, InvalidOperationError, PolarsInefficientMapWarning, ShapeError, @@ -1356,6 +1357,13 @@ def test_to_dummies_drop_first() -> None: assert_frame_equal(result, expected) +def test_to_dummies_null_clash_19096() -> None: + with pytest.raises( + DuplicateError, match="column with name '_null' has more than one occurrence" + ): + pl.Series([None, "null"]).to_dummies() + + def test_chunk_lengths() -> None: s = pl.Series("a", [1, 2, 2, 3]) # this is a Series with one chunk, of length 4