Path: blob/main/py-polars/tests/unit/operations/map/test_map_rows.py
8412 views
from __future__ import annotations12import polars as pl3from polars.testing import assert_frame_equal456def test_map_rows() -> None:7df = pl.DataFrame({"a": ["foo", "2"], "b": [1, 2], "c": [1.0, 2.0]})89result = df.map_rows(lambda x: len(x), None)1011expected = pl.DataFrame({"map": [3, 3]})12assert_frame_equal(result, expected)131415def test_map_rows_list_return() -> None:16df = pl.DataFrame({"start": [1, 2], "end": [3, 5]})1718result = df.map_rows(lambda r: pl.Series(range(r[0], r[1] + 1)))1920expected = pl.DataFrame({"map": [[1, 2, 3], [2, 3, 4, 5]]})21assert_frame_equal(result, expected)222324def test_map_rows_dataframe_return() -> None:25df = pl.DataFrame({"a": [1, 2, 3], "b": ["c", "d", None]})2627result = df.map_rows(lambda row: (row[0] * 10, "foo", True, row[-1]))2829expected = pl.DataFrame(30{31"column_0": [10, 20, 30],32"column_1": ["foo", "foo", "foo"],33"column_2": [True, True, True],34"column_3": ["c", "d", None],35}36)37assert_frame_equal(result, expected)383940def test_map_rows_shifted_chunks() -> None:41df = pl.DataFrame(pl.Series("texts", ["test", "test123", "tests"]))42df = df.select(pl.col("texts"), pl.col("texts").shift(1).alias("texts_shifted"))4344result = df.map_rows(lambda x: x)4546expected = pl.DataFrame(47{48"column_0": ["test", "test123", "tests"],49"column_1": [None, "test", "test123"],50}51)52assert_frame_equal(result, expected)535455def test_map_elements_infer() -> None:56lf = pl.LazyFrame(57{58"a": [1, 2, 3],59}60)61lf = lf.select(pl.col.a.map_elements(lambda v: f"pre-{v}"))6263# this should not go through execution, solely through the planner64schema = lf.collect_schema()6566assert schema.names() == ["a"]67assert schema.dtypes() == [pl.String]686970def test_map_rows_object_dtype() -> None:71df = pl.DataFrame(72{73"a": [0, 0, 1, 2, 2],74"b": [object(), 2, 0, 0, 1],75},76schema={"a": pl.Int64, "b": pl.Object},77)7879out = df.map_rows(lambda _d: 1)80assert_frame_equal(out, pl.DataFrame({"map": [1, 1, 1, 1, 1]}))818283