2

Python 3.8.6

令人惊讶的是,我无法在任何谷歌结果中找到完全相同的错误,但似乎datetime's timedeltaand relativedeltafrom relativedeltamodule 无法比较。这是要复制的代码:

from datetime import timedelta
from dateutil import relativedelta

timedelta(days=1) < relativedelta.relativedelta(days=1)

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-65-1444c9e4d5b8> in <module>
      2 from dateutil import relativedelta
      3 
----> 4 timedelta(days=1) < relativedelta.relativedelta(days=1)

TypeError: '<' not supported between instances of 'datetime.timedelta' and 'relativedelta'

我也注意到 和 之间类似的不timedelta64[ns]兼容relativedelta

重现代码

import datetime
from dateutil import relativedelta
r1 = pd.date_range(start = datetime.datetime(2018,1,1),end=datetime.datetime(2018,4,1),periods=4)
r2 = pd.date_range(start = datetime.datetime(2018,2,1),end=datetime.datetime(2018,5,1),periods=4)

(r1-r1) < relativedelta.relativedelta(days=1)

输出:

InvalidComparison                         Traceback (most recent call last)
~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/arrays/datetimelike.py in wrapper(self, other)
    115         try:
--> 116             other = _validate_comparison_value(self, other)
    117         except InvalidComparison:

~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/arrays/datetimelike.py in _validate_comparison_value(self, other)
     95         elif not is_list_like(other):
---> 96             raise InvalidComparison(other)
     97 

InvalidComparison: relativedelta(days=+1)

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-75-57e9f57d40b9> in <module>
      4 r2 = pd.date_range(start = datetime.datetime(2018,2,1),end=datetime.datetime(2018,5,1),periods=4)
      5 
----> 6 (r1-r1) < relativedelta.relativedelta(days=1)

~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/indexes/extension.py in wrapper(self, other)
    127 
    128         op = getattr(self._data, opname)
--> 129         return op(other)
    130 
    131     wrapper.__name__ = opname

~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/ops/common.py in new_method(self, other)
     63         other = item_from_zerodim(other)
     64 
---> 65         return method(self, other)
     66 
     67     return new_method

~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/arrays/datetimelike.py in wrapper(self, other)
    116             other = _validate_comparison_value(self, other)
    117         except InvalidComparison:
--> 118             return invalid_comparison(self, other, op)
    119 
    120         dtype = getattr(other, "dtype", None)

~/miniconda/envs/nyraml386/lib/python3.8/site-packages/pandas/core/ops/invalid.py in invalid_comparison(left, right, op)
     32     else:
     33         typ = type(right).__name__
---> 34         raise TypeError(f"Invalid comparison between dtype={left.dtype} and {typ}")
     35     return res_values
     36 

TypeError: Invalid comparison between dtype=timedelta64[ns] and relativedelta

我误解了一些非常基本的东西吗?这似乎relativedelta是一个禁区。是吗?处理 和 的最佳方法timedeltas是什么?pythonpandasnumpy

4

0 回答 0