Python Cerberus -使用此示例验证模式

cyvaqqii  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(149)

我正在使用Cerberus来验证dataframes模式。使用下面的示例数据和代码,if-else语句应该是“数据结构有效”,但它返回“数据结构无效”。任何见解将不胜感激。

import pandas as pd
from cerberus import Validator

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['New York', 'Paris', 'London']
})

data = df.to_dict()

schema = {
    'name': {'type': 'string'},
    'age': {'type': 'integer', 'min': 18},
    'city': {'type': 'string'}
}

validator = Validator(schema)
is_valid = validator.validate(data)

if is_valid:
    print("Data structure is valid!")
else:
    print("Data structure is not valid.")
    print(validator.errors)

结果:

>>> Data structure is not valid.
>>> {'age': ['must be of integer type'], 'city': ['must be of string type'], 'name': ['must be of string type']}
mzsu5hc0

mzsu5hc01#

失败的原因是df.to_dict()返回的dictionaries值与dictionaries值相同

data = df.to_dict()
print(data)
>>> {'name': {0: 'Alice', 1: 'Bob', 2: 'Charlie'}, 'age': {0: 25, 1: 30, 2: 35}, 'city': {0: 'New York', 1: 'Paris', 2: 'London'}}

如果你想让你的模式验证这个数据,你需要将它更改为:

schema = {
    "name": {"type": "dict", "valuesrules": {"type": "string"}},
    "age": {"type": "dict", "valuesrules": {"type": "integer", "min": 18}},
    "city": {"type": "dict", "valuesrules": {"type": "string"}},
}

相关问题