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

Polars中实现类似Pandas dropna(subset, thresh=1)的功能

在Polars中实现等价于Pandas df.dropna(subset=list_of_vars, thresh=1) 的功能

方法1:直接使用drop_nulls方法(推荐)

Polars提供的drop_nulls方法对应Pandas的dropna,通过指定参数可直接实现需求:

import polars as pl

df = pl.DataFrame(
    {
        'col1':[0,float('nan'),2,3],
        'col2':[0,float('nan'),float('nan'),3],
        'col3':[0,1,2,3],
        'col4':[float('nan'),float('nan'),float('nan'),float('nan')]
    },
    strict=False
)
list_of_vars = ['col1', 'col2']

result = df.drop_nulls(subset=list_of_vars, how='all')
print(result)

说明:

  • subset=list_of_vars:指定需要检查空值的目标列
  • how='all':仅当指定列全部为空时才删除该行,这和Pandas中thresh=1(要求至少1个非空值)的逻辑完全等价。

方法2:使用filter结合any_horizontal动态构建条件

如果更倾向于用filter实现,可以通过any_horizontal动态生成“或”逻辑的过滤条件:

result = df.filter(pl.any_horizontal(pl.col(col).is_not_null() for col in list_of_vars))
print(result)

说明:

  • 遍历list_of_vars,为每个列生成pl.col(col).is_not_null()(判断该列是否非空)的表达式
  • pl.any_horizontal()会对每行判断这些表达式中是否至少有一个为True,从而保留符合条件的行

输出结果

两种方法都会得到期望的输出:

┌──────┬──────┬──────┬──────┐
│ col1 ┆ col2 ┆ col3 ┆ col4 │
│ ---  ┆ ---  ┆ ---  ┆ ---  │
│ f64  ┆ f64  ┆ i64  ┆ f64  │
╞══════╪══════╪══════╪══════╡
│ 0.0  ┆ 0.0  ┆ 0    ┆ NaN  │
│ 2.0  ┆ NaN  ┆ 2    ┆ NaN  │
│ 3.0  ┆ 3.0  ┆ 3    ┆ NaN  │
└──────┴──────┴──────┴──────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:55:25