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

如何让Polars的map_elements方法作用于包含null的所有值?

解决Polars中map_elements跳过Null值的问题

1. 让map_elements处理所有值(包括Null)

Polars的map_elements方法默认启用skip_nulls=True参数,这就是Null值被跳过的原因。只需显式设置skip_nulls=False,就能让函数作用于每一个元素,包括Null:

import polars as pl

df = pl.DataFrame({"foo": [1, None, 3], "bar": [-1, None, 8]})

def print_and_fill(value):
    print("Value is", value)
    return 1

# 设置skip_nulls=False,处理所有元素
result = df["foo"].map_elements(print_and_fill, skip_nulls=False)
print(result)

执行后输出:

Value is 1
Value is None
Value is 3
shape: (3,)
Series: 'foo' [i64]
[
  1
  1
  1
]

2. 更优的创建is_null标记列的方法

其实完全不需要用map_elements实现这个需求,Polars提供了原生的is_null()表达式,性能远高于Python函数逐元素处理,代码也更简洁:

df = df.with_columns(
    is_foo_null=pl.col("foo").is_null(),
    is_bar_null=pl.col("bar").is_null()
)

处理后的数据集:

shape: (3, 4)
┌──────┬──────┬────────────┬────────────┐
│ foo  ┆ bar  ┆ is_foo_null ┆ is_bar_null │
│ ---  ┆ ---  ┆ ---        ┆ ---        │
│ i64  ┆ i64  ┆ bool       ┆ bool       │
╞══════╪══════╪════════════╪════════════╡
│ 1    ┆ -1   ┆ false      ┆ false      │
│ null ┆ null ┆ true       ┆ true       │
│ 3    ┆ 8    ┆ false      ┆ false      │
└──────┴──────┴────────────┴────────────┘

原生表达式是Polars的最佳实践,避免了Python层面的循环开销,处理大数据集时优势尤为明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:25:38