Skip to content

Commit 4d9a201

Browse files
fix empty list case
1 parent 2f8cd27 commit 4d9a201

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

pandas/core/arrays/datetimelike.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -517,16 +517,17 @@ def __getitem__(self, key):
517517
return self._box_func(val)
518518
return type(self)(val, dtype=self.dtype)
519519

520-
if is_list_like(key) and not isinstance(key, tuple):
521-
key = check_array_indexer(self, key)
522-
523520
if com.is_bool_indexer(key):
524-
# can still have object dtype
521+
# first check for boolean, because check_array_indexer doesn't
522+
# allow object dtype
525523
key = np.asarray(key, dtype=bool)
524+
key = check_array_indexer(self, key)
526525
if key.all():
527526
key = slice(0, None, None)
528527
else:
529528
key = lib.maybe_booleans_to_slice(key.view(np.uint8))
529+
elif is_list_like(key) and not isinstance(key, tuple):
530+
key = check_array_indexer(self, key)
530531

531532
is_period = is_period_dtype(self)
532533
if is_period:

pandas/core/indexers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,9 @@ def check_array_indexer(array: AnyArrayLike, indexer) -> np.ndarray:
371371

372372
if not is_array_like(indexer):
373373
indexer = pd_array(indexer)
374+
if len(indexer) == 0:
375+
# empty list is converted to float array by pd.array
376+
indexer = np.array([], dtype=np.intp)
374377
dtype = indexer.dtype
375378
if is_bool_dtype(dtype):
376379
try:

pandas/tests/extension/base/getitem.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ def test_getitem_scalar_na(self, data_missing, na_cmp, na_value):
9797
result = data_missing[0]
9898
assert na_cmp(result, na_value)
9999

100+
def test_getitem_empty(self, data):
101+
# Indexing with empty list
102+
result = data[[]]
103+
assert len(result) == 0
104+
assert isinstance(result, type(data))
105+
106+
expected = data[np.array([], dtype="int64")]
107+
self.assert_extension_array_equal(result, expected)
108+
100109
def test_getitem_mask(self, data):
101110
# Empty mask, raw array
102111
mask = np.zeros(len(data), dtype=bool)
@@ -153,7 +162,10 @@ def test_getitem_boolean_array_mask_raises(self, data):
153162
mask = pd.array(np.zeros(data.shape, dtype="bool"), dtype="boolean")
154163
mask[:2] = pd.NA
155164

156-
msg = "Cannot mask with a boolean indexer containing NA values"
165+
msg = (
166+
"Cannot mask with a boolean indexer containing NA values|"
167+
"cannot mask with array containing NA / NaN values"
168+
)
157169
with pytest.raises(ValueError, match=msg):
158170
data[mask]
159171

0 commit comments

Comments
 (0)