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

如何在Polars DataFrame中筛选唯一值少于100的字符串列?

问题分析与解决方法

你的代码问题所在

  1. 第一段代码报错原因:
    (pl.col(pl.String)) & (pl.all().n_unique() < 100)的逻辑不成立。pl.col(pl.String)是选中所有字符串列,而pl.all().n_unique() <100是对所有列计算唯一值数量后生成布尔值,两者属于不同维度的操作,无法用&直接组合来筛选列。

  2. 第二段代码未达到预期的原因:
    df.select(pl.all().n_unique() <100)返回单行布尔DataFrame是正常行为——n_unique()是聚合函数,在select中使用时,Polars会把每列的所有行聚合成一个结果(这里是该列唯一值数量是否小于100的布尔值),但这是创建新列的操作,不是筛选列的操作。

正确实现方式

方式一:分步筛选(新手友好,逻辑清晰)

# 提取所有字符串类型的列名
string_cols = df.select(pl.col(pl.String)).columns
# 筛选出唯一值数量少于100的列
valid_cols = [col for col in string_cols if df[col].n_unique() < 100]
# 选中目标列
filtered_df = df.select(valid_cols)

方式二:用Polars表达式API简洁实现

filtered_df = df.select([
    col for col in pl.col(pl.String) if col.n_unique() < 100
])

或者用filter方法:

filtered_df = df.select(
    pl.col(pl.String).filter(lambda col: col.n_unique() < 100)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:40:58