以下 pandas 的 DataFrame 未经过 pydantic 验证。怎么处理这个问题?
from pydantic.dataclasses import dataclass
@dataclass
class DataFrames:
dataframe1: pd.DataFrame = None
dataframe2: pd.DataFrame = None
这会引发以下错误:
File "pydantic\validators.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文档,您可以通过多种方式解决您的问题。
最简单的一种是在模型配置中允许任意类型,但这是与
BaseModel
一起打包的功能:再次引用 文档 :
请记住,pydantic.dataclasses.dataclass 是带有验证功能的 dataclasses.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