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

如何在Polars DataFrame的列表列中过滤空字符串并统计非空元素数

统计Polars列表列中非空字符串的数量

给定如下Polars DataFrame:

import polars as pl

pl.Config(fmt_table_cell_list_len=8, fmt_str_lengths=80)
    
df = pl.DataFrame({'test_names':[['Mallesham','','Bhavik','Jagarini','Jose','Fernando'],
                                 ['','','','ABC','','XYZ']]})

直接使用list.len()统计列表长度会把空字符串计入结果,无法满足需求:

df.with_columns(pl.col('test_names').list.len().alias('tot_names'))

解决方案

要过滤空字符串后统计数量,可采用以下几种高效实现方式:

方法1:list.filter + list.len

先过滤掉空字符串,再统计剩余元素的长度:

result = df.with_columns(
    pl.col('test_names').list.filter(lambda x: x != '').list.len().alias('tot_names')
)

方法2:list.eval 结合过滤与计数

通过list.eval在列表内部执行过滤和计数操作:

result = df.with_columns(
    pl.col('test_names').list.eval(pl.element().filter(pl.element() != '').count()).alias('tot_names')
)

方法3:布尔值求和

利用空字符串转为False、非空字符串转为True的特性,求和得到非空元素数量:

result = df.with_columns(
    pl.col('test_names').list.map_elements(lambda lst: sum(item != '' for item in lst)).alias('tot_names')
)

最终输出

以上方法均可得到预期结果:

┌─────────────────────────────────────────────────────────────┬───────────┐
│ test_names                                                  ┆ tot_names │
│ ---                                                         ┆ ---       │
│ list[str]                                                   ┆ u32       │
╞═════════════════════════════════════════════════════════════╪═══════════╡
│ ["Mallesham", "", "Bhavik", "Jagarini", "Jose", "Fernando"] ┆ 5         │
│ ["", "", "", "ABC", "", "XYZ"]                              ┆ 2         │
└─────────────────────────────────────────────────────────────┴───────────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:15:41