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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:33:27