Skip to content

Commit cf8d776

Browse files
author
Chang She
committed
ENH: pass single label to drop. GH #1143
1 parent 87bffb3 commit cf8d776

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

pandas/core/common.py

+14
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,20 @@ def _asarray_tuplesafe(values, dtype=None):
608608

609609
return result
610610

611+
def _index_labels_to_array(labels):
612+
if isinstance(labels, (basestring, tuple)):
613+
labels = [labels]
614+
615+
if not isinstance(labels, (list, np.ndarray)):
616+
try:
617+
labels = list(labels)
618+
except TypeError: # non-iterable
619+
labels = [labels]
620+
621+
labels = _asarray_tuplesafe(labels)
622+
623+
return labels
624+
611625
def _stringify(col):
612626
# unicode workaround
613627
try:

pandas/core/index.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ def drop(self, labels):
10111011
-------
10121012
dropped : Index
10131013
"""
1014-
labels = np.asarray(list(labels), dtype=object)
1014+
labels = com._index_labels_to_array(labels)
10151015
indexer = self.get_indexer(labels)
10161016
mask = indexer == -1
10171017
if mask.any():
@@ -1511,7 +1511,7 @@ def drop(self, labels, level=None):
15111511

15121512
try:
15131513
if not isinstance(labels, np.ndarray):
1514-
labels = com._asarray_tuplesafe(labels)
1514+
labels = com._index_labels_to_array(labels)
15151515
indexer = self.get_indexer(labels)
15161516
mask = indexer == -1
15171517
if mask.any():
@@ -1532,6 +1532,7 @@ def drop(self, labels, level=None):
15321532
return self.delete(inds)
15331533

15341534
def _drop_from_level(self, labels, level):
1535+
labels = com._index_labels_to_array(labels)
15351536
i = self._get_level_number(level)
15361537
index = self.levels[i]
15371538
values = index.get_indexer(labels)

pandas/tests/test_index.py

+4
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,10 @@ def test_drop(self):
395395

396396
self.assertRaises(ValueError, self.strIndex.drop, ['foo', 'bar'])
397397

398+
dropped = self.strIndex.drop(self.strIndex[0])
399+
expected = self.strIndex[1:]
400+
self.assert_(dropped.equals(expected))
401+
398402
def test_tuple_union_bug(self):
399403
import pandas
400404
import numpy as np

pandas/tests/test_multilevel.py

+8
Original file line numberDiff line numberDiff line change
@@ -1192,6 +1192,14 @@ def test_mixed_depth_drop(self):
11921192
expected = expected.drop([('top','OD','wy')], axis=1)
11931193
assert_frame_equal(expected, result)
11941194

1195+
result = df.drop('top', axis=1)
1196+
assert_frame_equal(expected, result)
1197+
1198+
result = df.drop('result1', level=1, axis=1)
1199+
expected = df.drop([('routine1', 'result1', ''),
1200+
('routine2', 'result1', '')], axis=1)
1201+
assert_frame_equal(expected, result)
1202+
11951203
def test_mixed_depth_pop(self):
11961204
arrays = [[ 'a', 'top', 'top', 'routine1', 'routine1', 'routine2'],
11971205
[ '', 'OD', 'OD', 'result1', 'result2', 'result1'],

0 commit comments

Comments
 (0)