Skip to content

Commit 383bc59

Browse files
committed
ENH: Check that v is not a callable (#13473)
In this commit, the bug is removed from the code, which raised a TypeError if a function was passed to rename instead of a dictionary.
1 parent 011e2c1 commit 383bc59

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Diff for: pandas/core/generic.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -1098,11 +1098,13 @@ def rename(self, *args, **kwargs):
10981098
level = self.axes[axis]._get_level_number(level)
10991099

11001100
# GH 13473
1101-
indexer = self.axes[axis].get_indexer_for(v)
1102-
missing_labels = [label for index, label in enumerate(v)
1103-
if indexer[index] == -1]
1104-
if errors == 'raise' and len(missing_labels) > 0:
1105-
raise KeyError('{} not found in axis'.format(missing_labels))
1101+
if not callable(v):
1102+
indexer = self.axes[axis].get_indexer_for(v)
1103+
missing_labels = [label for index, label in enumerate(v)
1104+
if indexer[index] == -1]
1105+
if errors == 'raise' and len(missing_labels) > 0:
1106+
raise KeyError('{} not found in axis'
1107+
.format(missing_labels))
11061108

11071109
result._data = result._data.rename_axis(f, axis=baxis, copy=copy,
11081110
level=level)

Diff for: pandas/tests/frame/test_alter_axes.py

+4
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,10 @@ def test_rename_errors(self):
890890
expected = DataFrame(columns=['a', 'B', 'C', 'D'])
891891
tm.assert_frame_equal(renamed, expected)
892892

893+
renamed = df.rename(columns=str.lower, errors='raise')
894+
expected = DataFrame(columns=['a', 'b', 'c', 'd'])
895+
tm.assert_frame_equal(renamed, expected)
896+
893897
def test_reorder_levels(self):
894898
index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]],
895899
codes=[[0, 0, 0, 0, 0, 0],

0 commit comments

Comments
 (0)