>>> import polars as pl
...
... df = pl.DataFrame(
... {
... "subject": ["subject1", "subject2"],
... "emails": [
... ["samATxyz.com", "janeATxyz.com", "jimATcustomer.org"],
... ["samATxyz.com", "zaneATxyz.com", "basATcustomer.org", "jimATcustomer.org"],
... ],
... }
... )
...
... df
shape: (2, 2)
subject emails
str list[str]
"subject1" ["samATxyz.com", "janeATxyz.com", "jimATcustomer.org"]
"subject2" ["samATxyz.com", "zaneATxyz.com", … "jimATcustomer.org"]
Я хочу отфильтровать данные так, чтобы столбец электронной почты содержал только электронные письма, заканчивающиеся на «ATxyz.com».
subject emails
str list[str]
"subject1" ["samATxyz.com", "janeATxyz.com"]
"subject2" ["samATxyz.com", "zaneATxyz.com"]
Как это сделать с помощью поляров?
У меня было несколько идей, но я не могу определить правильный синтаксис, или он кажется более сложным /verbose, чем я ожидал:
- Может быть, я мог бы как-то отфильтровать данные, используя .list.eval(pl.element() ... , но я не могу понять, как фильтровать элементы в списке с помощью этого синтаксиса.
- Я мог бы изменить форму данных с помощью .explode, но это кажется многословным и более сложным, чем нужно. .
>>> import polars as pl
...
... df = pl.DataFrame(
... {
... "subject": ["subject1", "subject2"],
... "emails": [
... ["samATxyz.com", "janeATxyz.com", "jimATcustomer.org"],
... ["samATxyz.com", "zaneATxyz.com", "basATcustomer.org", "jimATcustomer.org"],
... ],
... }
... )
...
... df.with_columns(
... pl.col("emails").list.eval(pl.element().str.contains("ATxyz")),
... )
shape: (2, 2)
subject emails
str list[bool]
"subject1" [true, true, false]
"subject2" [true, true, … false]
Подробнее здесь: https://stackoverflow.com/questions/790 ... ars-column