【问题标题】:How can I stop mypy complaining when comparing a pd.Series to single value?将 pd.Series 与单个值进行比较时,如何停止 mypy 抱怨?
【发布时间】:2022-08-02 21:19:04
【问题描述】:

我有以下代码:

result = pd.Series([pd.Timedelta(minutes=2)]) > pd.Timedelta(hours=1)

但是 mypy 抱怨以下内容:

error: Unsupported operand types for > (\"Series[Any]\" and \"Timedelta\")

我也试过:

s: pd.Series[pd.Timedelta] = pd.Series([pd.Timedelta(minutes=2)])
result = s > pd.Timedelta(hours=1)

但这也给出了一个错误:

error: Unsupported operand types for > (\"Series[Timedelta]\" and \"Timedelta\")

请注意,如果我只有一个带有ints 的系列,例如pd.Series([10]) > 3,mypy 不会抱怨。

我究竟做错了什么?

    标签: python pandas mypy


    【解决方案1】:

    pandas-stubs 1.4.3.220724 不允许 Timedeltapandas.Series.__gt__ 中。

    这已在 pandas-stubs 1.4.3.220801 中修复。

    早期版本的解决方法

    1.从类型检查中排除该行

    s = pd.Series([pd.Timedelta(minutes=2)])
    result = s > pd.Timedelta(hours=1)  # type: ignore
    

    2.使用该比较运算符的灵活包装器

    在这种情况下,pandas.Series.gt

    s = pd.Series([pd.Timedelta(minutes=2)])
    result = s.gt(pd.Timedelta(hours=1))
    

    3. 向类型检查器明确声明它实际上是受支持的

    from typing import cast
    
    import pandas as pd
    
    
    class SupportsGtTimedelta:
        def __gt__(self, other: pd.Timedelta): ...
    
    
    s = cast(SupportsGtTimedelta, pd.Series([pd.Timedelta(minutes=2)]))
    result = s > pd.Timedelta(hours=1)
    

    【讨论】:

      【解决方案2】:

      我认为您的 pandas 或 python 版本已过时,您可以安装最新版本,然后尝试参考我的屏幕截图以获取 3.10.5、1.4.3 的 python 和 pandas 版本 如果进一步,你遇到了一个问题评论给我一个截图

      【讨论】:

        猜你喜欢
        • 2022-01-10
        • 2021-09-29
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 2018-05-26
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        相关资源
        最近更新 更多