"pydanticvalidators.py":找不到<类'pandas.core.frame.DataFrame'的验证器>



pandas的DataFrame下面没有被pydantic验证。如何处理这种情况?

from pydantic.dataclasses import dataclass
@dataclass
class DataFrames:
dataframe1: pd.DataFrame = None
dataframe2: pd.DataFrame = None

这会抛出以下错误:

File "pydanticvalidators.py", line 715, in find_validators
RuntimeError: no validator found for <class 'pandas.core.frame.DataFrame'>, see `arbitrary_types_allowed` in Config

就我个人而言,我打错了类型注释

class Foo(BaseModel):
bar = Optional[NonNegativeInt]

而不是;

class Foo(BaseModel):
bar: Optional[NonNegativeInt]

傻傻的,但是仔细检查一下:)

根据Pydantic Docs,你可以用几种方法来解决你的问题。

最简单的方法是允许在模型配置中使用任意类型,但这是BaseModel打包的功能:再次引用文档:

请记住pydantic.dataclass .dataclass是数据类的临时替代品。带验证的数据类,而不是pydantic的替代品。BaseModel

考虑到这一点,以下代码运行良好:
import pandas as pd
from pydantic import BaseModel
class DataFrames(BaseModel):
dataframe1: pd.DataFrame = None
dataframe2: pd.DataFrame = None
class Config:
arbitrary_types_allowed = True

如果您来到这里的一般问题no validator found for <class 'XYZ'>,您应该检查错过的BaseModel继承:

from pydantic import BaseModel
class MyCustomType: # We forgot inheritance here, should be MyCustomType(BaseModel)
id: int
text: str
class MyCustomClass2(BaseModel):
data: List[MyCustomType]

另一个可能的错误:忘记从BaseModel继承模型,因此:

class Foo():
bar: str

而不是:

class Foo(BaseModel):
bar: str

相关内容