use*_*009 32 validation customvalidator pandas python-dataclasses pydantic
以下 pandas 的 DataFrame 未经过 pydantic 验证。这要怎么处理呢?
from pydantic.dataclasses import dataclass
@dataclass
class DataFrames:
dataframe1: pd.DataFrame = None
dataframe2: pd.DataFrame = None
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
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
Run Code Online (Sandbox Code Playgroud)
Kar*_*nga 57
就我个人而言,我输错了类型注释
class Foo(BaseModel):
bar = Optional[NonNegativeInt]
Run Code Online (Sandbox Code Playgroud)
而不是;
class Foo(BaseModel):
bar: Optional[NonNegativeInt]
Run Code Online (Sandbox Code Playgroud)
愚蠢的一个,但请仔细检查:)
pjm*_*jmv 22
根据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
Run Code Online (Sandbox Code Playgroud)
pav*_*roo 18
如果您来到这里遇到一般问题,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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48915 次 |
| 最近记录: |