mypy: 错误:当使用 axis="rows" 时,"..." 的重载变体与参数类型 "list[DataFrame]"、"str" 不匹配
我在运行
pd.concat(dfs, axis="rows")
pd.median(dfs, axis="rows")
基本上是任何可以接受轴参数的pandas函数,而mypy会报错:
error: No overload variant of "concat" matches argument types "list[DataFrame]", "str" [call-overload]
note: Possible overload variants:
... # Long list of possibilies
怎么才能消除这个有效代码上的mypy错误呢?
2 个回答
0
Pandas库没有为“rows”这个关键词定义类型重载:比如在concat方法中,只允许使用以下几种方式。
axis: Literal[0, "index"] = ...,
axis: Literal[1, "columns"],
用“index”代替“rows”可以解决这个问题。
顺便提一下:
Pandas定义了一个Axis类型,其中“rows”应该是一个有效的选项,所以这很可能是他们的一个bug:
Axis = Union[AxisInt, Literal["index", "columns", "rows"]]
1
我觉得这些类型不是来自Pandas本身,而是来自pandas-stubs
:
AxisInt: TypeAlias = int
AxisIndex: TypeAlias = Literal["index", 0]
AxisColumn: TypeAlias = Literal["columns", 1]
Axis: TypeAlias = AxisIndex | AxisColumn
在这个项目的README顶部还有这样一个说明:
这些类型可能没有完全覆盖Pandas发布的API。注意:当前版本2.0.x的pandas-stubs不支持Pandas 2.0的所有新特性。
解决这个问题的最好办法可能是:
- 要么等到类型被修正,或者
- 自己动手修复,参与到这个项目中。
你也可以在自己的代码中重新定义你需要的内容,但从长远来看,这可能效果不太好。