Skip to content

Commit d07d3c2

Browse files
committed
BUG: set_index inplace modifies data even if unique check fails #1831
1 parent e4a736e commit d07d3c2

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

pandas/core/frame.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2400,6 +2400,7 @@ def set_index(self, keys, drop=True, append=False, inplace=False,
24002400
else:
24012401
arrays.append(np.asarray(self.index))
24022402

2403+
to_remove = []
24032404
for col in keys:
24042405
if isinstance(col, Series):
24052406
level = col.values
@@ -2411,7 +2412,7 @@ def set_index(self, keys, drop=True, append=False, inplace=False,
24112412
level = frame[col].values
24122413
names.append(col)
24132414
if drop:
2414-
del frame[col]
2415+
to_remove.append(col)
24152416
arrays.append(level)
24162417

24172418
index = MultiIndex.from_arrays(arrays, names=names)
@@ -2420,6 +2421,9 @@ def set_index(self, keys, drop=True, append=False, inplace=False,
24202421
duplicates = index.get_duplicates()
24212422
raise Exception('Index has duplicate keys: %s' % duplicates)
24222423

2424+
for c in to_remove:
2425+
del frame[c]
2426+
24232427
# clear up memory usage
24242428
index._cleanup()
24252429

pandas/tests/test_frame.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,16 @@ def test_set_index2(self):
14231423
xp.index.names = [None, 'A', 'B']
14241424
assert_frame_equal(result, xp)
14251425

1426+
def test_set_index_nonuniq(self):
1427+
df = DataFrame({'A' : ['foo', 'foo', 'foo', 'bar', 'bar'],
1428+
'B' : ['one', 'two', 'three', 'one', 'two'],
1429+
'C' : ['a', 'b', 'c', 'd', 'e'],
1430+
'D' : np.random.randn(5),
1431+
'E' : np.random.randn(5)})
1432+
self.assertRaises(Exception, df.set_index, 'A', verify_integrity=True,
1433+
inplace=True)
1434+
self.assert_('A' in df)
1435+
14261436
def test_set_index_bug(self):
14271437
#GH1590
14281438
df = DataFrame({'val' : [0, 1, 2], 'key': ['a', 'b', 'c']})

0 commit comments

Comments
 (0)