You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandera装饰器结合类函数时遇TypeError报错求助

解决Pandera check_io装饰器传入YAML字符串报错问题

问题重现

用户尝试在Python类中使用Pandera的check_io装饰器,操作流程如下:

  1. 定义DataFrameSchema并保存为YAML文件
  2. 在类中读取YAML文件的文本内容,直接作为check_io的参数
  3. 调用类方法时触发报错:
TypeError: type of out argument not recognized: <class 'str'>

错误原因

check_io装饰器要求传入的参数是Pandera Schema对象(如DataFrameSchema实例),但用户通过file.read()读取的是YAML格式的纯字符串,类型不匹配导致报错。

解决方案

读取YAML文件后,需要将字符串反序列化为DataFrameSchema对象,使用Pandera提供的from_yaml方法即可完成这一步骤。

修正后的代码示例

1. 保存Schema到YAML文件(优化版)

推荐使用Pandera自带的to_yaml方法,比直接用yaml.dump更可靠:

import pandera as pa
from pandera import Column

# 定义输入Schema
in_schema = pa.DataFrameSchema(
    {
        "Name": Column(object, nullable=True),
        "Height": Column(object, nullable=True),
    }
)
in_schema.to_yaml("./in_.yml")

# 定义输出Schema
out_schema = pa.DataFrameSchema(
    {
        "Name": Column(object, nullable=True),
        "Height": Column(object, nullable=True),
    }
)
out_schema.to_yaml("./out_.yml")

2. 类定义与装饰器使用(修正版)

读取YAML时用from_yaml生成Schema对象:

import pandera as pa
from pandera import check_io
import pandas as pd

class TransformClass():
    # 读取YAML并反序列化为Schema对象
    with open("./in_.yml", "r") as file:
        in_schema = pa.DataFrameSchema.from_yaml(file)
    with open("./out_.yml", "r") as file:
        out_schema = pa.DataFrameSchema.from_yaml(file)

    @staticmethod
    @check_io(df=in_schema, out=out_schema)
    def func(df: pd.DataFrame) -> pd.DataFrame:
        return df

3. 调用方法

from test import TransformClass
import pandas as pd
import numpy as np

data = {
    'Name': [np.nan, 'Princi', 'Gaurav', 'Anuj'],
    'Height': [5.1, 6.2, 5.1, 5.2],
    'Qualification': ['Msc', 'MA', 'Msc', 'Msc']
}
df = pd.DataFrame(data)
TransformClass.func(df)

额外说明

如果坚持使用原生yaml库加载,需要指定Pandera的YAML Loader来正确解析Schema对象,示例如下:

import yaml
import pandera as pa

with open("./in_.yml", "r") as file:
    in_schema = yaml.load(file, Loader=pa.io.yaml_loader.YamlLoader)

但仍推荐使用Pandera自带的from_yaml方法,减少兼容性问题。

内容的提问来源于stack exchange,提问作者illuminato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:00:46