Skip to content

Commit 93c12d2

Browse files
committed
Merge pull request #5354 from jtratner/allow-drop-to-accept-names
BUG/ENH: Allow drop to accept axis name
2 parents 5c2411d + aba8bd7 commit 93c12d2

File tree

5 files changed

+65
-3
lines changed

5 files changed

+65
-3
lines changed

doc/source/release.rst

+2
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ Improvements to existing features
189189
right-open fashion using the ``closed`` parameter (:issue:`4579`)
190190
- Python csv parser now supports usecols (:issue:`4335`)
191191
- Added support for Google Analytics v3 API segment IDs that also supports v2 IDs. (:issue:`5271`)
192+
- ``NDFrame.drop()`` now accepts names as well as integers for the axis
193+
argument. (:issue:`5354`)
192194

193195
API Changes
194196
~~~~~~~~~~~

pandas/core/generic.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1093,14 +1093,15 @@ def drop(self, labels, axis=0, level=None):
10931093
Parameters
10941094
----------
10951095
labels : single label or list-like
1096-
axis : int
1096+
axis : int or axis name
10971097
level : int or name, default None
10981098
For MultiIndex
10991099
11001100
Returns
11011101
-------
11021102
dropped : type of caller
11031103
"""
1104+
axis = self._get_axis_number(axis)
11041105
axis_name = self._get_axis_name(axis)
11051106
axis, axis_ = self._get_axis(axis), axis
11061107

pandas/tests/test_frame.py

+19
Original file line numberDiff line numberDiff line change
@@ -6734,6 +6734,25 @@ def test_drop_col_still_multiindex(self):
67346734
del df[('a', '', '')]
67356735
assert(isinstance(df.columns, MultiIndex))
67366736

6737+
def test_drop(self):
6738+
simple = DataFrame({"A": [1, 2, 3, 4], "B": [0, 1, 2, 3]})
6739+
assert_frame_equal(simple.drop("A", axis=1), simple[['B']])
6740+
assert_frame_equal(simple.drop(["A", "B"], axis='columns'),
6741+
simple[[]])
6742+
assert_frame_equal(simple.drop([0, 1, 3], axis=0), simple.ix[[2], :])
6743+
assert_frame_equal(simple.drop([0, 3], axis='index'), simple.ix[[1, 2], :])
6744+
6745+
#non-unique - wheee!
6746+
nu_df = DataFrame(lzip(range(3), range(-3, 1), list('abc')),
6747+
columns=['a', 'a', 'b'])
6748+
assert_frame_equal(nu_df.drop('a', axis=1), nu_df[['b']])
6749+
assert_frame_equal(nu_df.drop('b', axis='columns'), nu_df['a'])
6750+
6751+
nu_df = nu_df.set_index(pd.Index(['X', 'Y', 'X']))
6752+
nu_df.columns = list('abc')
6753+
assert_frame_equal(nu_df.drop('X', axis='rows'), nu_df.ix[["Y"], :])
6754+
assert_frame_equal(nu_df.drop(['X', 'Y'], axis=0), nu_df.ix[[], :])
6755+
67376756
def test_fillna(self):
67386757
self.tsframe['A'][:5] = nan
67396758
self.tsframe['A'][-5:] = nan

pandas/tests/test_panel.py

+37
Original file line numberDiff line numberDiff line change
@@ -1624,6 +1624,43 @@ def test_dropna(self):
16241624
exp = p.ix[['a', 'c', 'd']]
16251625
assert_panel_equal(result, exp)
16261626

1627+
def test_drop(self):
1628+
df = DataFrame({"A": [1, 2], "B": [3, 4]})
1629+
panel = Panel({"One": df, "Two": df})
1630+
1631+
def check_drop(drop_val, axis_number, aliases, expected):
1632+
try:
1633+
actual = panel.drop(drop_val, axis=axis_number)
1634+
assert_panel_equal(actual, expected)
1635+
for alias in aliases:
1636+
actual = panel.drop(drop_val, axis=alias)
1637+
assert_panel_equal(actual, expected)
1638+
except AssertionError:
1639+
print("Failed with axis_number %d and aliases: %s" %
1640+
(axis_number, aliases))
1641+
raise
1642+
# Items
1643+
expected = Panel({"One": df})
1644+
check_drop('Two', 0, ['items'], expected)
1645+
1646+
# Major
1647+
exp_df = DataFrame({"A": [2], "B": [4]}, index=[1])
1648+
expected = Panel({"One": exp_df, "Two": exp_df})
1649+
check_drop(0, 1, ['major_axis', 'major'], expected)
1650+
1651+
exp_df = DataFrame({"A": [1], "B": [3]}, index=[0])
1652+
expected = Panel({"One": exp_df, "Two": exp_df})
1653+
check_drop([1], 1, ['major_axis', 'major'], expected)
1654+
1655+
# Minor
1656+
exp_df = df[['B']]
1657+
expected = Panel({"One": exp_df, "Two": exp_df})
1658+
check_drop(["A"], 2, ['minor_axis', 'minor'], expected)
1659+
1660+
exp_df = df[['A']]
1661+
expected = Panel({"One": exp_df, "Two": exp_df})
1662+
check_drop("B", 2, ['minor_axis', 'minor'], expected)
1663+
16271664
def test_update(self):
16281665
pan = Panel([[[1.5, np.nan, 3.],
16291666
[1.5, np.nan, 3.],

pandas/tests/test_series.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1429,14 +1429,14 @@ def test_drop(self):
14291429
expected = Series([1],index=['one'])
14301430
result = s.drop(['two'])
14311431
assert_series_equal(result,expected)
1432-
result = s.drop('two')
1432+
result = s.drop('two', axis='rows')
14331433
assert_series_equal(result,expected)
14341434

14351435
# non-unique
14361436
# GH 5248
14371437
s = Series([1,1,2],index=['one','two','one'])
14381438
expected = Series([1,2],index=['one','one'])
1439-
result = s.drop(['two'])
1439+
result = s.drop(['two'], axis=0)
14401440
assert_series_equal(result,expected)
14411441
result = s.drop('two')
14421442
assert_series_equal(result,expected)
@@ -1452,6 +1452,9 @@ def test_drop(self):
14521452
self.assertRaises(ValueError, s.drop, 'bc')
14531453
self.assertRaises(ValueError, s.drop, ('a',))
14541454

1455+
# bad axis
1456+
self.assertRaises(ValueError, s.drop, 'one', axis='columns')
1457+
14551458
def test_ix_setitem(self):
14561459
inds = self.series.index[[3, 4, 7]]
14571460

0 commit comments

Comments
 (0)