Great Expectations v3 API自定义期望_pandas收到意外参数_metrics
报错原因
你出现该报错是因为自定义的期望类和指标类遗漏了Great Expectations v3 API要求的必填配置项,同时指标实现方法的参数接收规则没有对齐框架要求,框架自动传入的_metrics参数没有被正常接收。
修复步骤
- 完善
ColumnMapMetricProvider子类的必填配置,显式接收框架传入的内置参数 - 完善
ColumnMapExpectation子类的必填元信息配置 - 补充空值/非数值场景的兼容处理逻辑,避免后续运行报错
修复后的完整代码
from great_expectations.execution_engine import PandasExecutionEngine from great_expectations.expectations.metrics import ( ColumnMapMetricProvider, column_condition_partial ) from great_expectations.expectations.expectation import ColumnMapExpectation import pandas as pd def check_positive(value): # 空值、非数值类型默认视为通过校验,可根据需求调整规则 if pd.isna(value) or not isinstance(value, (int, float)): return True return value > 0 class ColumnValueIsPositive(ColumnMapMetricProvider): condition_metric_name = "column_values.to_be_positive" # 新增必填:指定指标对应的域关键字段 condition_domain_keys = ("batch_id", "table", "column") # 新增必填:指定指标可接收的自定义值关键字段,无特殊参数则留空 condition_value_keys = () @column_condition_partial(engine=PandasExecutionEngine) def _pandas(cls, column, _metrics=None, **kwargs): # 显式接收框架自动传入的_metrics参数即可解决参数不匹配报错 return column.apply(check_positive) class ExpectColumnValuesToBePositive(ColumnMapExpectation): display_name = "期望列值为正数" # 绑定对应计算指标 map_metric = "column_values.to_be_positive" # 新增必填:指定期望的成功判断关键字段,列映射类期望默认支持mostly参数 success_keys = ("mostly",) # 可选:配置默认参数值 default_kwarg_values = { "mostly": 1.0 }
验证方法
修复后重启Jupyter Notebook内核,重新导入自定义期望执行即可:
from my_custom_expectation import ExpectColumnValuesToBePositive validator.expect_column_values_to_be_positive(column="duration")
内容的提问来源于stack exchange,提问作者antsarand1
相关产品推荐
相关产品推荐

