mypy: 错误:当使用 axis="rows" 时,"..." 的重载变体与参数类型 "list[DataFrame]"、"str" 不匹配

0 投票
2 回答
40 浏览
提问于 2025-04-12 12:49

我在运行

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的所有新特性。

解决这个问题的最好办法可能是:

  • 要么等到类型被修正,或者
  • 自己动手修复,参与到这个项目中。

你也可以在自己的代码中重新定义你需要的内容,但从长远来看,这可能效果不太好。

撰写回答