Skip to content

Commit 04c2133

Browse files
committed
DatetimeIndex get_loc validates date object
1 parent 3b1d4f1 commit 04c2133

File tree

5 files changed

+14
-14
lines changed

5 files changed

+14
-14
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.DatetimeLikeArrayMixin, 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
@@ -2106,6 +2106,8 @@ def _can_hold_element(self, element: Any) -> bool:
21062106
return is_datetime64_dtype(tipo)
21072107
elif element is NaT:
21082108
return True
2109+
elif isinstance(element, date):
2110+
return True
21092111
elif isinstance(element, datetime):
21102112
if self.is_datetimetz:
21112113
return tz_compare(element.tzinfo, self.dtype.tz)

pandas/tests/arithmetic/test_datetime64.py

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

pandas/tests/indexes/datetimes/test_datetime.py

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

pandas/tests/internals/test_internals.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -1100,14 +1100,9 @@ def test_datetime_block_can_hold_element(self):
11001100
arr[0] = val
11011101

11021102
val = date(2010, 10, 10)
1103-
assert not block._can_hold_element(val)
1103+
assert block._can_hold_element(val)
11041104

1105-
msg = (
1106-
"'value' should be a 'Timestamp', 'NaT', "
1107-
"or array of those. Got 'date' instead."
1108-
)
1109-
with pytest.raises(TypeError, match=msg):
1110-
arr[0] = val
1105+
arr[0] = val
11111106

11121107
@pytest.mark.parametrize(
11131108
"value, dtype",

0 commit comments

Comments
 (0)