【发布时间】:2020-11-22 14:47:15
【问题描述】:
我有一个函数可以对 numpy 数组或 pandas 数据帧执行一些算术运算(分位数归一化)。当你放入一个ndarray时,你应该得到一个ndarray,当你放入一个pandas数据框时,你应该得到一个数据框:
from typing import Union, overload
@overload
def quantile_normalize(data: pd.DataFrame) -> pd.DataFrame: ...
@overload
def quantile_normalize(data: np.ndarray) -> np.ndarray: ...
def quantile_normalize(data: Union[pd.DataFrame, np.ndarray]) -> Union[pd.DataFrame, np.ndarray]:
pass
但是,当我尝试使用 mypy 进行测试时,它会抱怨:
qnorm/quantile_normalize.py:72: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
到目前为止,我发现与此问题相关的问题和答案似乎都与可选输入/输出和无类型有关。 pandas 数据框和 numpy 数组是相关的,但是它们应该可以通过 mypy 区分。
【问题讨论】:
-
您有
numpy/pandas的类型存根可用吗?例如。运行pip install data-science-types,删除因缺少numpy/pandas而忽略的类型提示并检查错误是否仍然存在。 -
@hoefling 确实解决了这个问题。请将此作为答案提交,我很乐意接受它:)
标签: python-3.x pandas numpy type-hinting mypy