8000 BUG: make .reset_index() raise when passed an invalid level name (#21… · pandas-dev/pandas@e033c06 · GitHub
[go: up one dir, main page]

10000
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
  • pandas
  • 3 files changed

    +25
    -4
    lines changed

    doc/source/whatsnew/v0.23.1.txt

    Lines changed: 1 addition & 1 deletion
    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

    Lines changed: 4 additions & 3 deletions
    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

    Lines changed: 20 additions & 0 deletions
    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)
    0