Skip to content

Commit 19b96d9

Browse files
tamuheyPingviinituutti
authored andcommitted
ENH: indexing and __getitem__ of dataframe and series accept zerodim integer np.array as int (pandas-dev#24924)
1 parent c395ec6 commit 19b96d9

File tree

6 files changed

+44
-0
lines changed

6 files changed

+44
-0
lines changed

doc/source/whatsnew/v0.25.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ including other versions of pandas.
1919
Other Enhancements
2020
^^^^^^^^^^^^^^^^^^
2121

22+
- Indexing of ``DataFrame`` and ``Series`` now accepts zerodim ``np.ndarray`` (:issue:`24919`)
2223
- :meth:`Timestamp.replace` now supports the ``fold`` argument to disambiguate DST transition times (:issue:`25017`)
2324
- :meth:`DataFrame.at_time` and :meth:`Series.at_time` now support :meth:`datetime.time` objects with timezones (:issue:`24043`)
2425
-

pandas/core/frame.py

+1
Original file line numberDiff line numberDiff line change
@@ -2838,6 +2838,7 @@ def _ixs(self, i, axis=0):
28382838
return result
28392839

28402840
def __getitem__(self, key):
2841+
key = lib.item_from_zerodim(key)
28412842
key = com.apply_if_callable(key, self)
28422843

28432844
# shortcut if the key is in columns

pandas/core/indexing.py

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import numpy as np
66

77
from pandas._libs.indexing import _NDFrameIndexerBase
8+
from pandas._libs.lib import item_from_zerodim
89
import pandas.compat as compat
910
from pandas.compat import range, zip
1011
from pandas.errors import AbstractMethodError
@@ -1856,6 +1857,7 @@ def _getitem_axis(self, key, axis=None):
18561857
if axis is None:
18571858
axis = self.axis or 0
18581859

1860+
key = item_from_zerodim(key)
18591861
if is_iterator(key):
18601862
key = list(key)
18611863

@@ -2222,6 +2224,7 @@ def _getitem_axis(self, key, axis=None):
22222224

22232225
# a single integer
22242226
else:
2227+
key = item_from_zerodim(key)
22252228
if not is_integer(key):
22262229
raise TypeError("Cannot index by location index with a "
22272230
"non-integer key")

pandas/tests/indexing/test_iloc.py

+13
Original file line numberDiff line numberDiff line change
@@ -697,3 +697,16 @@ def test_identity_slice_returns_new_object(self):
697697
# should also be a shallow copy
698698
original_series[:3] = [7, 8, 9]
699699
assert all(sliced_series[:3] == [7, 8, 9])
700+
701+
def test_indexing_zerodim_np_array(self):
702+
# GH24919
703+
df = DataFrame([[1, 2], [3, 4]])
704+
result = df.iloc[np.array(0)]
705+
s = pd.Series([1, 2], name=0)
706+
tm.assert_series_equal(result, s)
707+
708+
def test_series_indexing_zerodim_np_array(self):
709+
# GH24919
710+
s = Series([1, 2])
711+
result = s.iloc[np.array(0)]
712+
assert result == 1

pandas/tests/indexing/test_loc.py

+13
Original file line numberDiff line numberDiff line change
@@ -778,3 +778,16 @@ def test_loc_setitem_empty_append_raises(self):
778778
msg = "cannot copy sequence with size 2 to array axis with dimension 0"
779779
with pytest.raises(ValueError, match=msg):
780780
df.loc[0:2, 'x'] = data
781+
782+
def test_indexing_zerodim_np_array(self):
783+
# GH24924
784+
df = DataFrame([[1, 2], [3, 4]])
785+
result = df.loc[np.array(0)]
786+
s = pd.Series([1, 2], name=0)
787+
tm.assert_series_equal(result, s)
788+
789+
def test_series_indexing_zerodim_np_array(self):
790+
# GH24924
791+
s = Series([1, 2])
792+
result = s.loc[np.array(0)]
793+
assert result == 1

pandas/tests/indexing/test_scalar.py

+13
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,16 @@ def test_iat_setter_incompatible_assignment(self):
221221
result.iat[0, 0] = None
222222
expected = DataFrame({"a": [None, 1], "b": [4, 5]})
223223
tm.assert_frame_equal(result, expected)
224+
225+
def test_getitem_zerodim_np_array(self):
226+
# GH24924
227+
# dataframe __getitem__
228+
df = DataFrame([[1, 2], [3, 4]])
229+
result = df[np.array(0)]
230+
expected = Series([1, 3], name=0)
231+
tm.assert_series_equal(result, expected)
232+
233+
# series __getitem__
234+
s = Series([1, 2])
235+
result = s[np.array(0)]
236+
assert result == 1

0 commit comments

Comments
 (0)