Polars如何删除含无穷值(np.inf/-np.inf)的行?
在Polars中删除含无穷值的行
要删除包含np.inf或-np.inf的行,同时保留NaN值以便后续单独处理,你可以用Polars的表达式系统实现,这是最符合Polars风格的做法:
核心思路
通过is_infinite()方法检测无穷值,结合any_horizontal()判断每行是否存在任意一个无穷值,最后用filter()过滤掉这些行。
代码示例
import polars as pl import numpy as np # 创建测试DataFrame df = pl.DataFrame({ "col1": [1.0, np.inf, 3.0, np.nan], "col2": [-np.inf, 2.0, np.nan, 4.0], "col3": [5.0, 6.0, 7.0, 8.0] }) # 删除含无穷值的行 clean_df = df.filter(~pl.col("*").is_infinite().any_horizontal()) print(clean_df)
代码解释
pl.col("*"):选中DataFrame的所有列.is_infinite():对每个元素判断是否为无穷值(np.inf或-np.inf),返回布尔值的DataFrame.any_horizontal():检查每行是否有至少一个True(即存在无穷值)~:取反,保留所有没有无穷值的行
针对特定列处理
如果你只需要检查某几列的无穷值,把pl.col("*")换成指定列名即可:
# 只检查col1和col2列的无穷值 clean_df = df.filter(~pl.col(["col1", "col2"]).is_infinite().any_horizontal())
这种方法完全基于Polars的向量化表达式,效率远高于逐行循环,同时完美保留NaN值,满足你单独处理NaN的需求。
内容的提问来源于stack exchange,提问作者gg99
相关产品推荐
相关产品推荐

