如何修复mypy报错:"Series[Any]" not callable [operator]
解决pandas代码中mypy报错"Series[Any]" not callable的问题
问题重现
你的代码:
import pandas as pd df_data = pd.DataFrame( [ {"a": 2, "b": 1}, {"a": 2, "b": 10}, {"a": 3, "b": 77}, ] ) df_data.groupby("a").size().to_frame("size")
mypy报错:
toy.py:12: error: "Series[Any]" not callable [operator] Found 1 error in 1 file (checked 1 source file)
报错原因
这是pandas-stub(pandas的类型定义文件)的bug:groupby.size()返回的Series对象,其to_frame方法被错误地定义成了属性而非可调用方法。mypy依据stub文件做类型检查,自然认为你在调用一个不能被调用的属性,从而抛出错误。
修复方法
方法1:用类型断言明确告知mypyto_frame是可调用方法
通过typing.cast强制指定to_frame的类型,让mypy识别它是可调用的:
import pandas as pd from typing import cast, Callable df_data = pd.DataFrame( [ {"a": 2, "b": 1}, {"a": 2, "b": 10}, {"a": 3, "b": 77}, ] ) size_series = df_data.groupby("a").size() # 断言to_frame是接收字符串参数并返回DataFrame的函数 result = cast(Callable[[str], pd.DataFrame], size_series.to_frame)("size")
方法2:临时忽略该行的mypy错误
如果不想改动代码结构,可以在报错行添加注释,让mypy跳过对该错误的检查:
df_data.groupby("a").size().to_frame("size") # type: ignore[operator]
方法3:等待pandas-stub版本修复
这个问题属于类型定义文件的错误,后续pandas-stub更新时大概率会修复,你可以关注它的版本更新,升级到修复后的版本即可解决。
内容的提问来源于stack exchange,提问作者zyxue
相关产品推荐
相关产品推荐

