使用Pandas Series做函数类型标注时出现TypeError: 'type' object is not subscriptable
问题原因
你遇到的TypeError: 'type' object is not subscriptable错误,是因为旧版本的Pandas中,Series不属于泛型类型,不能像List[Any]这类标准库泛型一样,通过[Any]下标指定内部元素的类型。只有Pandas 1.3.0及以上版本才支持Series的泛型类型标注。
解决方案
方案一:升级Pandas到1.3.0及以上版本
如果你的项目允许升级依赖,直接更新Pandas后,原有代码可以正常运行。更规范的写法可以先定义类型变量,增强类型约束的灵活性:
from typing import TypeVar, Any from pandas import Series T = TypeVar('T', bound=Any) def func(w: Series[T], v: Series[T]) -> int: # 编写函数逻辑 return 0
方案二:兼容旧版本Pandas的写法
如果无法升级Pandas,直接移除泛型下标,仅标注Series类型即可:
from pandas import Series def func(w: Series, v: Series) -> int: # 编写函数逻辑 return 0
若你希望明确标注元素类型,且使用Python 3.9及以上版本,也可以用Annotated来补充说明:
from typing import Annotated, Any from pandas import Series def func(w: Annotated[Series, Any], v: Annotated[Series, Any]) -> int: # 编写函数逻辑 return 0
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

