Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/py-polars/tests/unit/operations/namespaces/string/test_concat.py
6940 views
1
from datetime import datetime
2
3
import pytest
4
5
import polars as pl
6
from polars.testing import assert_series_equal
7
8
9
def test_str_join() -> None:
10
s = pl.Series(["1", None, "2", None])
11
# propagate null
12
assert_series_equal(
13
s.str.join("-", ignore_nulls=False), pl.Series([None], dtype=pl.String)
14
)
15
# ignore null
16
assert_series_equal(s.str.join(), pl.Series(["12"]))
17
18
# str None/null is ok
19
s = pl.Series(["1", "None", "2", "null"])
20
assert_series_equal(
21
s.str.join("-", ignore_nulls=False), pl.Series(["1-None-2-null"])
22
)
23
assert_series_equal(s.str.join("-"), pl.Series(["1-None-2-null"]))
24
25
26
def test_str_join2() -> None:
27
df = pl.DataFrame({"foo": [1, None, 2, None]})
28
29
out = df.select(pl.col("foo").str.join(ignore_nulls=False))
30
assert out.item() is None
31
32
out = df.select(pl.col("foo").str.join())
33
assert out.item() == "12"
34
35
36
def test_str_join_all_null() -> None:
37
s = pl.Series([None, None, None], dtype=pl.String)
38
assert_series_equal(
39
s.str.join(ignore_nulls=False), pl.Series([None], dtype=pl.String)
40
)
41
assert_series_equal(s.str.join(ignore_nulls=True), pl.Series([""]))
42
43
44
def test_str_join_empty_list() -> None:
45
s = pl.Series([], dtype=pl.String)
46
assert_series_equal(s.str.join(ignore_nulls=False), pl.Series([""]))
47
assert_series_equal(s.str.join(ignore_nulls=True), pl.Series([""]))
48
49
50
def test_str_join_empty_list2() -> None:
51
s = pl.Series([], dtype=pl.String)
52
df = pl.DataFrame({"foo": s})
53
result = df.select(pl.col("foo").str.join()).item()
54
expected = ""
55
assert result == expected
56
57
58
def test_str_join_empty_list_agg_context() -> None:
59
df = pl.DataFrame(data={"i": [1], "v": [None]}, schema_overrides={"v": pl.String})
60
result = df.group_by("i").agg(pl.col("v").drop_nulls().str.join())["v"].item()
61
expected = ""
62
assert result == expected
63
64
65
def test_str_join_datetime() -> None:
66
df = pl.DataFrame({"d": [datetime(2020, 1, 1), None, datetime(2022, 1, 1)]})
67
out = df.select(pl.col("d").str.join("|", ignore_nulls=True))
68
assert out.item() == "2020-01-01 00:00:00.000000|2022-01-01 00:00:00.000000"
69
out = df.select(pl.col("d").str.join("|", ignore_nulls=False))
70
assert out.item() is None
71
72
73
def test_str_concat_deprecated() -> None:
74
s = pl.Series(["1", None, "2", None])
75
with pytest.deprecated_call():
76
result = s.str.concat()
77
expected = pl.Series(["1-2"])
78
assert_series_equal(result, expected)
79
80