![](/img/trans.png)
[英]python decorator on class: TypeError: super() argument 1 must be type, not function
[英]Getting "TypeError: type of out argument not recognized: <class 'str'>" when using class function with Pandera decorator
我正在嘗試使用 Python 包“Pandera”中的裝飾器,但我很難讓它們使用類。
首先,我為 Pandera 創建模式:
from pandera import Column, Check
import yaml
in_ = pa.DataFrameSchema(
{
"Name": Column(object, nullable=True),
"Height": Column(object, nullable=True),
})
with open("./in_.yml", "w") as file:
yaml.dump(in_, file)
out_ = pa.DataFrameSchema(
{
"Name": Column(object, nullable=True),
"Height": Column(object, nullable=True),
})
with open("./out_.yml", "w") as file:
yaml.dump(out_, file)
接下來我用類創建test.py
文件:
from pandera import check_io
import pandas as pd
class TransformClass():
with open("./in_.yml", "r") as file:
in_ = file.read()
with open("./out_.yml", "r") as file:
out_ = file.read()
@staticmethod
@check_io(df=in_, out=out_)
def func(df: pd.DataFrame) -> pd.DataFrame:
return df
最后我導入了這個類:
from test import TransformClass
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)
我正進入(狀態:
File C:\Anaconda3\envs\py310\lib\site-packages\pandera\decorators.py:464, in check_io.<locals>._wrapper(fn, instance, args, kwargs)
462 out_schemas = []
463 else:
--> 464 raise TypeError(
465 f"type of out argument not recognized: {type(out)}"
466 )
468 wrapped_fn = fn
469 for input_getter, input_schema in inputs.items():
470 # pylint: disable=no-value-for-parameter
TypeError: type of out argument not recognized: <class 'str'>
任何幫助將不勝感激
check_io
裝飾器需要pandera.DataFrameSchema
類型的參數。 但是,它被傳遞給類型為 _out 的str
因為它是_out
file.read()
的輸出。
Pandera 文檔解釋了check_io
裝飾器期望的類型。
一個解決方案是將file.read()
行的輸出傳遞給 Pandera 構造函數,可能需要進行一些轉換:
out_ = yaml.safe_load(file.read())
感謝@grbeazley,這里是完整的解決方案:
from pandera import Column, Check
import yaml
in_ = pa.DataFrameSchema(
{
"Name": Column(object, nullable=True),
"Height": Column(object, nullable=True),
})
with open("in_.yml", "w") as file:
yaml.dump(in_.to_yaml(), file)
with open("./in_.yml", "r") as file:
in_ = yaml.safe_load(file.read())
_ = pa.DataFrameSchema.from_yaml(in_)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.