Skip to content

Commit e033c06

Browse files
KalyanGokhaletoobaz
authored andcommitted
BUG: make .reset_index() raise when passed an invalid level name (#21016)
closes #20925
1 parent 6cc5f23 commit e033c06

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

doc/source/whatsnew/v0.23.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Conversion
6464
Indexing
6565
^^^^^^^^
6666

67-
-
67+
- Bug in :meth:`Series.reset_index` where appropriate error was not raised with an invalid level name (:issue:`20925`)
6868
-
6969

7070
I/O

pandas/core/series.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1195,12 +1195,13 @@ def reset_index(self, level=None, drop=False, name=None, inplace=False):
11951195
inplace = validate_bool_kwarg(inplace, 'inplace')
11961196
if drop:
11971197
new_index = com._default_index(len(self))
1198-
if level is not None and isinstance(self.index, MultiIndex):
1198+
if level is not None:
11991199
if not isinstance(level, (tuple, list)):
12001200
level = [level]
12011201
level = [self.index._get_level_number(lev) for lev in level]
1202-
if len(level) < len(self.index.levels):
1203-
new_index = self.index.droplevel(level)
1202+
if isinstance(self.index, MultiIndex):
1203+
if len(level) < self.index.nlevels:
1204+
new_index = self.index.droplevel(level)
12041205

12051206
if inplace:
12061207
self.index = new_index

pandas/tests/series/test_alter_axes.py

+20
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ def test_reset_index_level(self):
188188
with tm.assert_raises_regex(IndexError, 'Too many levels'):
189189
s.reset_index(level=[0, 1, 2])
190190

191+
# Check that .reset_index([],drop=True) doesn't fail
192+
result = pd.Series(range(4)).reset_index([], drop=True)
193+
expected = pd.Series(range(4))
194+
assert_series_equal(result, expected)
195+
191196
def test_reset_index_range(self):
192197
# GH 12071
193198
s = pd.Series(range(2), name='A', dtype='int64')
@@ -275,3 +280,18 @@ def test_set_axis_prior_to_deprecation_signature(self):
275280
with tm.assert_produces_warning(FutureWarning):
276281
result = s.set_axis(0, list('abcd'), inplace=False)
277282
tm.assert_series_equal(result, expected)
283+
284+
def test_reset_index_drop_errors(self):
285+
# GH 20925
286+
287+
# KeyError raised for series index when passed level name is missing
288+
s = pd.Series(range(4))
289+
with tm.assert_raises_regex(KeyError, 'must be same as name'):
290+
s.reset_index('wrong', drop=True)
291+
with tm.assert_raises_regex(KeyError, 'must be same as name'):
292+
s.reset_index('wrong')
293+
294+
# KeyError raised for series when level to be dropped is missing
295+
s = pd.Series(range(4), index=pd.MultiIndex.from_product([[1, 2]] * 2))
296+
with tm.assert_raises_regex(KeyError, 'not found'):
297+
s.reset_index('wrong', drop=True)

0 commit comments

Comments
 (0)