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
相关产品推荐
相关产品推荐

