如何让Polars的.map_elements()遇函数异常时直接报错?1.18.0已修复
更新说明
该问题已在Polars 1.18.0版本中通过PR #20417修复。
问题场景
使用Polars的.map_elements方法将自定义Python函数应用到序列元素时,若函数抛出异常,Polars默认会将结果设为Null而非终止运行。
正常执行示例:
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") )
当函数抛出异常时,结果列被填充为Null:
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") )
解决方案
在map_elements方法中添加strict=True参数,即可让Polars在函数抛出异常时直接终止运行并报错:
import polars as pl df = pl.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) 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, strict=True).alias("summed") )
运行上述代码时,函数抛出的异常会直接中断程序并输出错误信息,不再生成Null值结果。
注意:
strict参数仅在Polars 1.18.0及以上版本可用,若使用旧版本需先升级Polars。
内容的提问来源于stack exchange,提问作者foglerit
相关产品推荐
相关产品推荐

