diff --git a/pandas/core/arrays/datetimes.py b/pandas/core/arrays/datetimes.py index 905242bfdd8ad..247fae02d348f 100644 --- a/pandas/core/arrays/datetimes.py +++ b/pandas/core/arrays/datetimes.py @@ -1,4 +1,4 @@ -from datetime import datetime, time, timedelta, tzinfo +from datetime import date, datetime, time, timedelta, tzinfo from typing import Optional, Union import warnings @@ -152,7 +152,7 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps): _typ = "datetimearray" _scalar_type = Timestamp - _recognized_scalars = (datetime, np.datetime64) + _recognized_scalars = (datetime, np.datetime64, date) _is_recognized_dtype = is_datetime64_any_dtype # define my properties & methods for delegation diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index 24b00199611bf..d3cefa07e373e 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import date, datetime, timedelta import inspect import re from typing import TYPE_CHECKING, Any, List, Optional, Type, Union, cast @@ -2226,6 +2226,8 @@ def _can_hold_element(self, element: Any) -> bool: return is_datetime64_dtype(tipo) elif element is NaT: return True + elif isinstance(element, date): + return True elif isinstance(element, datetime): if self.is_datetimetz: return tz_compare(element.tzinfo, self.dtype.tz) diff --git a/pandas/tests/arithmetic/test_datetime64.py b/pandas/tests/arithmetic/test_datetime64.py index cefd2ae7a9ddb..b270e806b84ca 100644 --- a/pandas/tests/arithmetic/test_datetime64.py +++ b/pandas/tests/arithmetic/test_datetime64.py @@ -70,10 +70,6 @@ def test_compare_zerodim(self, tz_naive_fixture, box_with_array): 4.0, object(), timedelta(days=2), - # GH#19800, GH#19301 datetime.date comparison raises to - # match DatetimeIndex/Timestamp. This also matches the behavior - # of stdlib datetime.datetime - datetime(2001, 1, 1).date(), # GH#19301 None and NaN are *not* cast to NaT for comparisons None, np.nan, diff --git a/pandas/tests/indexes/datetimes/test_datetime.py b/pandas/tests/indexes/datetimes/test_datetime.py index b801f750718ac..933b24ac0fa8f 100644 --- a/pandas/tests/indexes/datetimes/test_datetime.py +++ b/pandas/tests/indexes/datetimes/test_datetime.py @@ -403,3 +403,10 @@ def test_split_non_utc(self): result = np.split(indices, indices_or_sections=[])[0] expected = indices._with_freq(None) tm.assert_index_equal(result, expected) + + def test_in_contains_date_object(self): + # GH#35466 + d1 = date(2002, 9, 1) + idx1 = DatetimeIndex([d1]) + assert d1 in idx1 + assert "2002-09-01" in idx1 diff --git a/pandas/tests/internals/test_internals.py b/pandas/tests/internals/test_internals.py index bddc50a3cbcc1..27207b313d723 100644 --- a/pandas/tests/internals/test_internals.py +++ b/pandas/tests/internals/test_internals.py @@ -1067,7 +1067,7 @@ def test_datetime_block_can_hold_element(self): arr[0] = val val = date(2010, 10, 10) - assert not block._can_hold_element(val) + assert block._can_hold_element(val) msg = ( "value should be a 'Timestamp', 'NaT', "