Skip to content

Commit 243c219

Browse files
committed
Merge pull request #11653 from jreback/range
BUG: indexing with a range , #11652
2 parents 2d03832 + b5b9ccc commit 243c219

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

doc/source/whatsnew/v0.17.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ Bug Fixes
169169

170170

171171

172-
172+
- Bug in indexing with a ``range``, (:issue:`11652`)
173173

174174

175175
- Bug in ``to_sql`` using unicode column names giving UnicodeEncodeError with (:issue:`11431`).

pandas/core/index.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1755,7 +1755,8 @@ def get_loc(self, key, method=None, tolerance=None):
17551755
if tolerance is not None:
17561756
raise ValueError('tolerance argument only valid if using pad, '
17571757
'backfill or nearest lookups')
1758-
return self._engine.get_loc(_values_from_object(key))
1758+
key = _values_from_object(key)
1759+
return self._engine.get_loc(key)
17591760

17601761
indexer = self.get_indexer([key], method=method,
17611762
tolerance=tolerance)

pandas/core/indexing.py

+6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def _get_setitem_indexer(self, key):
104104

105105
if isinstance(key, tuple) and not self.ndim < len(key):
106106
return self._convert_tuple(key, is_setter=True)
107+
if isinstance(key, range):
108+
return self._convert_range(key, is_setter=True)
107109

108110
try:
109111
return self._convert_to_indexer(key, is_setter=True)
@@ -156,6 +158,10 @@ def _convert_tuple(self, key, is_setter=False):
156158
keyidx.append(idx)
157159
return tuple(keyidx)
158160

161+
def _convert_range(self, key, is_setter=False):
162+
""" convert a range argument """
163+
return list(key)
164+
159165
def _convert_scalar_indexer(self, key, axis):
160166
# if we are accessing via lowered dim, use the last dim
161167
ax = self.obj._get_axis(min(axis, self.ndim - 1))

pandas/tests/test_indexing.py

+11
Original file line numberDiff line numberDiff line change
@@ -4726,6 +4726,17 @@ def test_indexing_dtypes_on_empty(self):
47264726
assert_series_equal(df2.loc[:,'a'], df2.iloc[:,0])
47274727
assert_series_equal(df2.loc[:,'a'], df2.ix[:,0])
47284728

4729+
def test_range_in_series_indexing(self):
4730+
# range can cause an indexing error
4731+
# GH 11652
4732+
for x in [5, 999999, 1000000]:
4733+
s = pd.Series(index=range(x))
4734+
s.loc[range(1)] = 42
4735+
assert_series_equal(s.loc[range(1)],Series(42.0,index=[0]))
4736+
4737+
s.loc[range(2)] = 43
4738+
assert_series_equal(s.loc[range(2)],Series(43.0,index=[0,1]))
4739+
47294740
@slow
47304741
def test_large_dataframe_indexing(self):
47314742
#GH10692

0 commit comments

Comments
 (0)