“pydantic alidators.py”:找不到<class 'pandas.core.frame.DataFrame'>

问题描述 投票:0回答:4

以下 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
pandas validation customvalidator pydantic python-dataclasses
4个回答
55
投票

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

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

而不是;

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

愚蠢的一个,但请仔细检查:)


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

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]

0
投票

另一个可能的错误:忘记从

BaseModel
继承模型,所以这样:

class Foo():
    bar: str

而不是这个:

class Foo(BaseModel):
    bar: str
© www.soinside.com 2019 - 2024. All rights reserved.