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

Polars后端Pandera自定义校验函数被调用两次的问题

Pandera + Polars后端:自定义列级校验函数被重复调用两次的问题

问题现象

  • 使用Pandera搭配Polars后端执行Schema校验时,所有自定义列级校验函数都会被调用两次;切换为Pandas后端时,函数仅执行一次
  • 未配置Schema/容器级校验,仅设置了列级校验规则
  • 实例:10行数据的DataFrame,自定义校验函数has_valid_format在Pandas环境下被调用10次,Polars环境下被调用20次

排查过程

  • 通过traceback.print_stack和调试语句定位问题,发现Polars的expr.py文件中_map_batches_wrapper.__call__方法被调用了两次
  • 推测问题根源是self._pyexpr.map_batches的调用,导致apply_lambda流程中每列的自定义校验函数被重复执行
  • 已确认校验逻辑本身仅触发一次,expr.py中的wrap_f函数仅定义一次,但最终被调用了两次

复现代码

import polars as pl
import pandera as pa
from pandera.typing import Series

# 自定义校验函数
def has_valid_format(value: str) -> bool:
    print(f"校验函数被调用:{value}")
    return len(value) == 5

# 定义Schema
class DataSchema(pa.SchemaModel):
    code: Series[str] = pa.Field(validator=has_valid_format)

# 创建测试数据
df = pl.DataFrame({"code": ["abcde", "fghij", "klmno"]})

# 执行校验
DataSchema.validate(df, lazy=False)

运行上述代码后,每条数据的校验函数会被打印两次;切换为Pandas后端(将pl.DataFrame改为pd.DataFrame)则仅打印一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:52:08