如何用Polars API筛选唯一值少于3的列?求更惯用实现方式
在Polars中筛选唯一值数量少于指定阈值的列
你可以直接利用Polars的表达式API,通过select配合列级条件判断完成筛选,这是最符合Polars风格的惯用写法,无需额外的Python循环或类型转换:
import polars as pl df = pl.DataFrame({"col1":[1,1,2], "col2":[1,2,3], "col3":[3,3,3]}) df_few_unique = df.select(pl.col(pl.all().n_unique() < 3))
写法解释
pl.all().n_unique() < 3:对所有列计算唯一值数量,生成布尔掩码标记出唯一值数量小于3的列pl.col(...):根据布尔掩码筛选对应列,直接传入select方法即可完成列过滤
对比原有实现
你的代码需要将掩码转换为NumPy数组后循环筛选列,而上面的写法完全利用Polars的向量化表达式能力,代码更简洁,还能避免Python层面的循环开销,执行效率更高。
反向筛选的等价写法
如果习惯用drop操作,也可以通过排除不符合条件的列实现同样效果:
df_few_unique = df.drop(pl.col(pl.all().n_unique() >= 3))
和Pandas写法的对比
Pandas中你用df.loc[:, mask]完成列筛选,Polars的写法更紧凑,直接在select中内嵌列级条件判断,无需单独生成掩码变量。
内容的提问来源于stack exchange,提问作者TomNorway
相关产品推荐
相关产品推荐

