Skip to content

Commit

Permalink
Add inplace support for rename_axis and add tests for happy case
Browse files Browse the repository at this point in the history
  • Loading branch information
hendrikmakait committed Jun 1, 2017
1 parent d419be4 commit 2c51767
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
20 changes: 13 additions & 7 deletions pandas/core/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ def rename_axis(self, mapper, axis=0, copy=True, inplace=False):
Returns
-------
renamed : type of caller
renamed : type of caller or None if inplace=True
See Also
--------
Expand Down Expand Up @@ -784,27 +784,31 @@ def rename_axis(self, mapper, axis=0, copy=True, inplace=False):
non_mapper = is_scalar(mapper) or (is_list_like(mapper) and not
is_dict_like(mapper))
if non_mapper:
return self._set_axis_name(mapper, axis=axis)
return self._set_axis_name(mapper, axis=axis, inplace=inplace)
else:
axis = self._get_axis_name(axis)
d = {'copy': copy, 'inplace': inplace}
d[axis] = mapper
return self.rename(**d)

def _set_axis_name(self, name, axis=0):
def _set_axis_name(self, name, axis=0, inplace=False):
"""
Alter the name or names of the axis, returning self.
Alter the name or names of the axis.
Parameters
----------
name : str or list of str
Name for the Index, or list of names for the MultiIndex
axis : int or str
0 or 'index' for the index; 1 or 'columns' for the columns
inplace : bool
whether to modify `self` directly or return a copy
.. versionadded: 0.21.0
Returns
-------
renamed : type of caller
renamed : type of caller or None if inplace=True
See Also
--------
Expand All @@ -831,9 +835,11 @@ def _set_axis_name(self, name, axis=0):
axis = self._get_axis_number(axis)
idx = self._get_axis(axis).set_names(name)

renamed = self.copy(deep=True)
inplace = validate_bool_kwarg(inplace, 'inplace')
renamed = self if inplace else self.copy()
renamed.set_axis(axis, idx)
return renamed
if not inplace:
return renamed

# ----------------------------------------------------------------------
# Comparisons
Expand Down
8 changes: 8 additions & 0 deletions pandas/tests/frame/test_alter_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,14 @@ def test_rename(self):
pd.Index(['bar', 'foo'], name='name'))
assert renamed.index.name == renamer.index.name

def test_rename_axis_inplace(self):
# GH 15704
expected = self.frame.rename_axis('foo')
no_return = self.frame.rename_axis('foo', inplace=True)
assert no_return is None
result = self.frame
assert_frame_equal(result, expected)

def test_rename_multiindex(self):

tuples_index = [('foo1', 'bar1'), ('foo2', 'bar2')]
Expand Down

0 comments on commit 2c51767

Please sign in to comment.