TypeError:ufunc'add'不包含签名匹配类型为dtype('<U57')dtype('<U57')dtype('<U57')的循环

时间:2020-03-17 07:45:12

标签: json python-3.x pandas great-expectations

我对管道测试抱有很高的期望。

我有一个批处理的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('

1 个答案:

答案 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)。