Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/py-polars/tests/unit/operations/map/test_map_rows.py
8412 views
1
from __future__ import annotations
2
3
import polars as pl
4
from polars.testing import assert_frame_equal
5
6
7
def test_map_rows() -> None:
8
df = pl.DataFrame({"a": ["foo", "2"], "b": [1, 2], "c": [1.0, 2.0]})
9
10
result = df.map_rows(lambda x: len(x), None)
11
12
expected = pl.DataFrame({"map": [3, 3]})
13
assert_frame_equal(result, expected)
14
15
16
def test_map_rows_list_return() -> None:
17
df = pl.DataFrame({"start": [1, 2], "end": [3, 5]})
18
19
result = df.map_rows(lambda r: pl.Series(range(r[0], r[1] + 1)))
20
21
expected = pl.DataFrame({"map": [[1, 2, 3], [2, 3, 4, 5]]})
22
assert_frame_equal(result, expected)
23
24
25
def test_map_rows_dataframe_return() -> None:
26
df = pl.DataFrame({"a": [1, 2, 3], "b": ["c", "d", None]})
27
28
result = df.map_rows(lambda row: (row[0] * 10, "foo", True, row[-1]))
29
30
expected = pl.DataFrame(
31
{
32
"column_0": [10, 20, 30],
33
"column_1": ["foo", "foo", "foo"],
34
"column_2": [True, True, True],
35
"column_3": ["c", "d", None],
36
}
37
)
38
assert_frame_equal(result, expected)
39
40
41
def test_map_rows_shifted_chunks() -> None:
42
df = pl.DataFrame(pl.Series("texts", ["test", "test123", "tests"]))
43
df = df.select(pl.col("texts"), pl.col("texts").shift(1).alias("texts_shifted"))
44
45
result = df.map_rows(lambda x: x)
46
47
expected = pl.DataFrame(
48
{
49
"column_0": ["test", "test123", "tests"],
50
"column_1": [None, "test", "test123"],
51
}
52
)
53
assert_frame_equal(result, expected)
54
55
56
def test_map_elements_infer() -> None:
57
lf = pl.LazyFrame(
58
{
59
"a": [1, 2, 3],
60
}
61
)
62
lf = lf.select(pl.col.a.map_elements(lambda v: f"pre-{v}"))
63
64
# this should not go through execution, solely through the planner
65
schema = lf.collect_schema()
66
67
assert schema.names() == ["a"]
68
assert schema.dtypes() == [pl.String]
69
70
71
def test_map_rows_object_dtype() -> None:
72
df = pl.DataFrame(
73
{
74
"a": [0, 0, 1, 2, 2],
75
"b": [object(), 2, 0, 0, 1],
76
},
77
schema={"a": pl.Int64, "b": pl.Object},
78
)
79
80
out = df.map_rows(lambda _d: 1)
81
assert_frame_equal(out, pl.DataFrame({"map": [1, 1, 1, 1, 1]}))
82
83