From cd7f86d80448ff3028c494335cb801a971d0db07 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Mon, 15 Jul 2019 09:26:57 -0700 Subject: [PATCH] disallow np.timedelta64 in is_integer --- pandas/_libs/tslibs/util.pxd | 3 ++- pandas/core/indexes/timedeltas.py | 2 +- pandas/core/internals/blocks.py | 6 ++---- pandas/tests/dtypes/test_inference.py | 4 +--- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/pandas/_libs/tslibs/util.pxd b/pandas/_libs/tslibs/util.pxd index dc32dcd5e0b21..07c2805dd0ef6 100644 --- a/pandas/_libs/tslibs/util.pxd +++ b/pandas/_libs/tslibs/util.pxd @@ -76,7 +76,8 @@ cdef inline bint is_integer_object(object obj) nogil: ----- This counts np.timedelta64 objects as integers. """ - return not PyBool_Check(obj) and PyArray_IsIntegerScalar(obj) + return (not PyBool_Check(obj) and PyArray_IsIntegerScalar(obj) + and not is_timedelta64_object(obj)) cdef inline bint is_float_object(object obj) nogil: diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index ecadd11894bfb..5a2dece98150f 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -593,7 +593,7 @@ def _maybe_cast_slice_bound(self, label, side, kind): return lbound else: return lbound + to_offset(parsed.resolution_string) - Timedelta(1, "ns") - elif (is_integer(label) or is_float(label)) and not is_timedelta64_dtype(label): + elif is_integer(label) or is_float(label): self._invalid_indexer("slice", label) return label diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index f931df25c4fd5..24e0a7fbad0a5 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -2609,15 +2609,13 @@ def _can_hold_element(self, element): return issubclass(tipo.type, (np.timedelta64, np.int64)) elif element is NaT: return True - return is_integer(element) or isinstance( - element, (timedelta, np.timedelta64, np.int64) - ) + return is_integer(element) or isinstance(element, (timedelta, np.timedelta64)) def fillna(self, value, **kwargs): # allow filling with integers to be # interpreted as nanoseconds - if is_integer(value) and not isinstance(value, np.timedelta64): + if is_integer(value): # Deprecation GH#24694, GH#19233 warnings.warn( "Passing integers to fillna is deprecated, will " diff --git a/pandas/tests/dtypes/test_inference.py b/pandas/tests/dtypes/test_inference.py index 0b440e0186fbc..4d688976cd50b 100644 --- a/pandas/tests/dtypes/test_inference.py +++ b/pandas/tests/dtypes/test_inference.py @@ -1203,9 +1203,7 @@ def test_is_integer(self): assert not is_integer(Timestamp("2011-01-01", tz="US/Eastern")) assert not is_integer(timedelta(1000)) assert not is_integer(Timedelta("1 days")) - - # questionable - assert is_integer(np.timedelta64(1, "D")) + assert not is_integer(np.timedelta64(1, "D")) def test_is_float(self): assert is_float(1.1)