pydantic验证pd.DataFrame提示无对应验证器如何解决?
解决pydantic dataclass 支持pd.DataFrame类型字段的方案
错误原因
pydantic默认未提供pandas DataFrame类型的内置校验器,因此直接声明pd.DataFrame类型字段会抛出找不到校验器的错误。
方案1:启用任意类型允许配置(最简方案)
通过给dataclass添加配置项arbitrary_types_allowed=True,允许pydantic接收未注册的任意类型值,仅做基础的类型匹配校验。
pydantic v2 写法
from pydantic.dataclasses import dataclass from pydantic import ConfigDict import pandas as pd @dataclass(config=ConfigDict(arbitrary_types_allowed=True)) class DataFrames: dataframe1: pd.DataFrame = None dataframe2: pd.DataFrame = None
pydantic v1 写法
from pydantic.dataclasses import dataclass import pandas as pd class DataclassConfig: arbitrary_types_allowed = True @dataclass(config=DataclassConfig) class DataFrames: dataframe1: pd.DataFrame = None dataframe2: pd.DataFrame = None
方案2:自定义字段校验器(更严谨)
如果需要对DataFrame做更严格的校验(比如校验是否为空、是否包含指定列等),可以通过自定义字段校验器实现,无需开启任意类型允许配置。
from pydantic.dataclasses import dataclass from pydantic import field_validator import pandas as pd from typing import Optional @dataclass class DataFrames: dataframe1: Optional[pd.DataFrame] = None dataframe2: Optional[pd.DataFrame] = None @field_validator('dataframe1', 'dataframe2') def validate_dataframe(cls, value): if value is None: return value # 校验类型是否为DataFrame if not isinstance(value, pd.DataFrame): raise ValueError(f'期望输入pandas DataFrame类型,实际得到{type(value)}') # 可按需添加额外校验规则,示例:校验DataFrame非空 # if value.empty: # raise ValueError('DataFrame不能是空表') return value
内容的提问来源于stack exchange,提问作者Vaibhav Hiwase
相关产品推荐
相关产品推荐

