如何将Polars数据框中数值/整数列的inf值转为null值
将Polars数据框数值列的inf转换为null(按列类型筛选)
可以直接通过Polars的类型筛选和内置方法实现,无需指定列名字符串。以下是两种简洁的实现方式:
方法一:使用replace批量替换
import polars as pl import numpy as np df = pl.DataFrame({ "label": ["a", "b", "c"], "ratio_a": [1.0, 2.0, np.inf], "ratio_b": [10.0, np.inf, 20.0], "ratio_c": [3.0, 200, 300], "ratio_d": [-1.0, -2.0, np.inf], }) # 针对所有数值类型列,替换正负inf为null df_clean = df.with_columns( pl.col(pl.NUMERIC_DTYPES).replace([np.inf, -np.inf], None) ) print(df_clean)
方法二:使用is_infinite条件判断
如果需要更明确的逻辑控制,可以用条件表达式实现:
df_clean = df.with_columns( pl.when(pl.col(pl.NUMERIC_DTYPES).is_infinite()) .then(None) .otherwise(pl.col(pl.NUMERIC_DTYPES)) )
处理后结果
shape: (3, 5) ┌───────┬─────────┬─────────┬─────────┬─────────┐ │ label ┆ ratio_a ┆ ratio_b ┆ ratio_c ┆ ratio_d │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═══════╪═════════╪═════════╪═════════╪═════════╡ │ a ┆ 1.0 ┆ 10.0 ┆ 3.0 ┆ -1.0 │ │ b ┆ 2.0 ┆ null ┆ 200.0 ┆ -2.0 │ │ c ┆ null ┆ 20.0 ┆ 300.0 ┆ null │ └───────┴─────────┴─────────┴─────────┴─────────┘
关键说明
pl.NUMERIC_DTYPES是Polars内置的数值类型集合,自动覆盖所有整数(i32、i64等)和浮点数(f32、f64)类型,无需手动列举列名。- 两种方法都会同时处理正无穷(
np.inf)和负无穷(-np.inf),确保所有极端值都被转换为null。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

