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

如何高效地仅对DataFrame的特定列执行fill_null操作?

仅对Polars DataFrame数值列填充空值的优化实现

问题

我想仅对DataFrame的数值列执行fill_null(strategy="zero")操作,目前的实现代码如下,请问有没有更符合Polars风格或者更高效的实现方式?

当前实现代码

import polars as pl
import polars.selectors as cs

df = pl.DataFrame(
    [
        pl.Series("id", ["alpha", None, "gamma"]),
        pl.Series("xs", [None, 100, 2]),
    ]
)

final_df = df.select(cs.exclude(cs.numeric()))
final_df = final_df.with_columns(
    df.select(cs.numeric()).fill_null(strategy="zero")
)

print(final_df)

当前输出

shape: (3, 2)
┌───────┬─────┐
│ id    ┆ xs  │
│ ---   ┆ --- │
│ str   ┆ i64 │
╞═══════╪═════╡
│ alpha ┆ 0   │
│ null  ┆ 100 │
│ gamma ┆ 2   │
└───────┴─────┘

优化实现

你可以直接利用Polars的列选择器和with_columns方法,无需拆分再合并DataFrame,代码更简洁且符合Polars的链式风格:

import polars as pl
import polars.selectors as cs

df = pl.DataFrame(
    [
        pl.Series("id", ["alpha", None, "gamma"]),
        pl.Series("xs", [None, 100, 2]),
    ]
)

# 直接针对数值列执行空值填充,保留所有原有列
final_df = df.with_columns(
    cs.numeric().fill_null(strategy="zero")
)

print(final_df)

优势说明

  • 代码更简洁:不需要拆分DataFrame再合并,一行with_columns即可完成目标操作,可读性更强
  • 效率更高:避免了中间DataFrame的创建和数据复制,Polars会在同一个查询计划中完成列的修改,执行性能更优
  • 符合Polars设计理念:充分利用Polars的列选择器和方法链特性,保持代码的连贯性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:52:24