在 .map_elements() 中引发异常

问题描述 投票:0回答:1

我正在使用

.map_elements
将复杂的 Python 函数应用于极坐标系的每个元素。这是一个玩具示例:

import polars as pl

df = pl.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})

def sum_cols(row):
    return row["A"] + row["B"]

df.with_columns(
    pl.struct(pl.all())
    .map_elements(sum_cols, return_dtype=pl.Int32).alias("summed")
)

shape: (3, 3)
┌─────┬─────┬────────┐
│ A   ┆ B   ┆ summed │
│ --- ┆ --- ┆ ---    │
│ i64 ┆ i64 ┆ i32    │
╞═════╪═════╪════════╡
│ 1   ┆ 4   ┆ 5      │
│ 2   ┆ 5   ┆ 7      │
│ 3   ┆ 6   ┆ 9      │
└─────┴─────┴────────┘

但是,当我的函数引发异常时,Polars 会默默地使用 Nulls 作为计算的输出:

def sum_cols(row):
    raise Exception
    return row["A"] + row["B"]

df.with_columns(
    pl.struct(pl.all())
    .map_elements(sum_cols, return_dtype=pl.Int32).alias("summed")
)

shape: (3, 3)
┌─────┬─────┬────────┐
│ A   ┆ B   ┆ summed │
│ --- ┆ --- ┆ ---    │
│ i64 ┆ i64 ┆ i32    │
╞═════╪═════╪════════╡
│ 1   ┆ 4   ┆ null   │
│ 2   ┆ 5   ┆ null   │
│ 3   ┆ 6   ┆ null   │
└─────┴─────┴────────┘

当我的函数引发异常时,如何使 Polars 命令失败?

python python-polars
1个回答
0
投票

我很确定这是 Polars 中的一个错误。 https://github.com/pola-rs/polars/issues/19315

作为解决方法,您可以使用

.map_batches()
传递整个“列”:

import polars as pl

df = pl.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})

def sum_cols(col):
    raise Exception
    return pl.Series(row["A"] + row["B"] for row in col)

df.with_columns(
    pl.struct(pl.all()).map_batches(sum_cols)
)

这正如人们所期望的那样传播异常。

# ComputeError: Exception: 
© www.soinside.com 2019 - 2024. All rights reserved.