我在使用 pandera 和 mypy 插件时遇到意外的 mypy 错误。
在 Windows 上,我使用以下命令安装 pandas、mypy 和 pandera(使用 mypy 插件):
pip install pandas mypy pandera[mypy]
然后,我创建一个包含以下正文的 mypy.ini 文件:
[mypy]
plugins = pandera.mypy
然后,我使用来自 pandera 文档的以下脚本创建一个 test.py 文件:
import pandera as pa
from pandera.typing import Index, Series
class CustomCheckSchema(pa.DataFrameModel):
a: Series[int] = pa.Field(gt=0, coerce=True)
abc: Series[int]
idx: Index[str]
@pa.check("a", name="foobar")
def custom_check(cls, a: Series[int]) -> Series[bool]:
return a < 100
@pa.check("^a", regex=True, name="foobar")
def custom_check_regex(cls, a: Series[int]) -> Series[bool]:
return a > 0
@pa.check("idx")
def check_idx(cls, idx: Index[int]) -> Series[bool]:
return idx.str.contains("dog")
我预计不会有错误,因为这直接来自 pandera 文档。 但是,运行命令
mypy test.py
时,出现以下错误:
test.py:12: error: Incompatible return value type (got "pandas.core.series.Series[bool]", expected "pandera.typing.pandas.Series[bool]") [return-value]
test.py:16: error: Incompatible return value type (got "pandas.core.series.Series[bool]", expected "pandera.typing.pandas.Series[bool]") [return-value]
test.py:20: error: Incompatible return value type (got "pandas.core.series.Series[bool]", expected "pandera.typing.pandas.Series[bool]") [return-value]
Found 3 errors in 1 file (checked 1 source file)
为什么会发生这种情况,我应该如何输入提示我的模型以避免这些错误?
要使用 Pandera 实现给定的代码,您需要使用 Pandera 的模式定义语法 (https://pandera.readthedocs.io/en/latest/) 定义模式。以下是实施方法:
import pandas as pd
import pandera as pa
from pandera.typing import Index, Series
class CustomCheckSchema(pa.SchemaModel):
a: Series[int] = pa.Field(gt=0, coerce=True)
abc: Series[int]
idx: Index[str]
@pa.check("a", name="foobar")
def custom_check(cls, a: Series[int]) -> pd.Series[bool]:
return a < 100
@pa.check("^a", regex=True, name="foobar")
def custom_check_regex(cls, a: Series[int]) -> pd.Series[bool]:
return a > 0
@pa.check("idx")
def check_idx(cls, idx: Index[str]) -> pd.Series[bool]:
return idx.str.contains("dog")