You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars的列表类型列中过滤指定邮箱元素?

Polars过滤列表中符合结尾条件的邮箱元素

直接解决方案

使用Polars的list.filter结合str.ends_with可以高效实现需求,代码如下:

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"],
        ],
    }
)

# 过滤emails列表中以"ATxyz.com"结尾的元素
result_df = df.with_columns(
    pl.col("emails").list.filter(pl.element().str.ends_with("ATxyz.com"))
)

print(result_df)

执行后输出:

shape: (2, 2)
┌──────────┬───────────────────────────────────┐
│ subject  ┆ emails                            │
│ ---      ┆ ---                               │
│ str      ┆ list[str]                         │
╞══════════╪═══════════════════════════════════╡
│ subject1 ┆ ["samATxyz.com", "janeATxyz.com"] │
│ subject2 ┆ ["samATxyz.com", "zaneATxyz.com"] │
└──────────┴───────────────────────────────────┘

关键逻辑说明

  • list.filter:Polars专为列表类型提供的过滤方法,传入布尔表达式即可筛选列表内符合条件的元素。
  • pl.element():指代列表中的每个元素,用于在列表上下文里编写针对单个元素的判断逻辑。
  • str.ends_with("ATxyz.com"):精准匹配字符串结尾,相比str.contains更贴合需求,避免误匹配中间包含目标字符串的邮箱。

基于你原有思路的改进

如果想用list.eval实现,可在eval内部对元素进行过滤,代码如下:

df.with_columns(
    pl.col("emails").list.eval(pl.element().filter(pl.element().str.ends_with("ATxyz.com")))
)

不过list.filter语法更直观,推荐优先使用。

关于explode的说明

用explode重塑数据虽然可行,但需要经历展开列表→过滤→分组聚合回列表三个步骤,代码冗余且性能不如直接操作列表的方法,尤其在数据量较大时差异明显,因此不推荐。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:08:15