我对管道测试抱有很高的期望。
我有一个批处理的Dataframe类型:-
great_expectations.dataset.pandas_dataset.PandasDataset
我想构建动态验证表达式。
即 批处理。(“列名”,“值”)在其中 validatetype columname和来自json文件的值。
JSON结构:-
{
"column_name": "sex",
"validation_type": "expect_column_values_to_be_in_set",
"validation_value": ["MALE","FEMALE"]
},
当我构建此表达式时,出现如下所述的错误消息。
代码:-
def add_validation(self,batch,validation_list):
for d in validation_list:
expression = "." + d["validation_type"] + "(" + d["column_name"] + "," +
str(d["validation_value"]) + ")"
print(expression)
batch+expression
batch.save_expectation_suite(discard_failed_expectations=False)
return batch
输出:-
print statement output
.expect_column_values_to_be_in_set(sex,['MALE','FEMALE'])
错误:-
TypeError:ufunc'add'不包含签名匹配的循环 类型dtype('
答案 0 :(得分:1)
在great_expectations中,expectation_suite
对象旨在捕获评估期望的所有必要信息。因此,在您的情况下,最自然的事情是将您拥有的源json文件转换为great_expectations期望套件格式。
执行此操作的最佳方法取决于您从何处获取原始JSON结构-理想情况下,您希望尽早进行翻译(甚至在创建该源JSON之前?),并保留GE格式的期望值。
例如,如果您的所有期望都属于expect_column_values_to_be_in_set
类型,则可以直接翻译:
expectations = []
for d in validation_list:
expectation_config = {
"expectation_type": d["validation_type"],
"kwargs": {
"column": d["column_name"],
"value_set": d["validation_value"]
}
}
expectation_suite = {
"expectation_suite_name": "my_suite",
"expectations": expectations
}
另一方面,如果您要处理各种不同的期望,则还需要确保JSON中的validate_value映射到期望的正确kwargs(例如,如果{{1 }},那么您实际上需要提供expect_column_values_to_be_between
和/或min_value
)。