Skip to content

Commit 8127b54

Browse files
committed
DatetimeIndex get_loc validates date object
1 parent a057135 commit 8127b54

File tree

5 files changed

+13
-8
lines changed

5 files changed

+13
-8
lines changed

pandas/core/arrays/datetimes.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, time, timedelta, tzinfo
1+
from datetime import date, datetime, time, timedelta, tzinfo
22
from typing import Optional, Union
33
import warnings
44

@@ -152,7 +152,7 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps):
152152

153153
_typ = "datetimearray"
154154
_scalar_type = Timestamp
155-
_recognized_scalars = (datetime, np.datetime64)
155+
_recognized_scalars = (datetime, np.datetime64, date)
156156
_is_recognized_dtype = is_datetime64_any_dtype
157157

158158
# define my properties & methods for delegation

pandas/core/internals/blocks.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import date, datetime, timedelta
22
import inspect
33
import re
44
from typing import TYPE_CHECKING, Any, List, Optional, Type, Union, cast
@@ -2226,6 +2226,8 @@ def _can_hold_element(self, element: Any) -> bool:
22262226
return is_datetime64_dtype(tipo)
22272227
elif element is NaT:
22282228
return True
2229+
elif isinstance(element, date):
2230+
return True
22292231
elif isinstance(element, datetime):
22302232
if self.is_datetimetz:
22312233
return tz_compare(element.tzinfo, self.dtype.tz)

pandas/tests/arithmetic/test_datetime64.py

-4
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,6 @@ def test_compare_zerodim(self, tz_naive_fixture, box_with_array):
7070
4.0,
7171
object(),
7272
timedelta(days=2),
73-
# GH#19800, GH#19301 datetime.date comparison raises to
74-
# match DatetimeIndex/Timestamp. This also matches the behavior
75-
# of stdlib datetime.datetime
76-
datetime(2001, 1, 1).date(),
7773
# GH#19301 None and NaN are *not* cast to NaT for comparisons
7874
None,
7975
np.nan,

pandas/tests/indexes/datetimes/test_datetime.py

+7
Original file line numberDiff line numberDiff line change
@@ -403,3 +403,10 @@ def test_split_non_utc(self):
403403
result = np.split(indices, indices_or_sections=[])[0]
404404
expected = indices._with_freq(None)
405405
tm.assert_index_equal(result, expected)
406+
407+
def test_in_contains_date_object(self):
408+
# GH#35466
409+
d1 = date(2002, 9, 1)
410+
idx1 = DatetimeIndex([d1])
411+
assert d1 in idx1
412+
assert "2002-09-01" in idx1

pandas/tests/internals/test_internals.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1067,7 +1067,7 @@ def test_datetime_block_can_hold_element(self):
10671067
arr[0] = val
10681068

10691069
val = date(2010, 10, 10)
1070-
assert not block._can_hold_element(val)
1070+
assert block._can_hold_element(val)
10711071

10721072
msg = (
10731073
"value should be a 'Timestamp', 'NaT', "

0 commit comments

Comments
 (0)