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