Skip to content

Commit 14da6e6

Browse files
committed
Drop take_last kwarg from method signatures
Affected methods: 1) nlargest 2) nsmallest 3) duplicated 4) drop_duplicates xref pandas-devgh-10236, pandas-devgh-10792, pandas-devgh-10920.
1 parent 61f6f63 commit 14da6e6

File tree

15 files changed

+16
-182
lines changed

15 files changed

+16
-182
lines changed

asv_bench/benchmarks/series_methods.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def setup(self):
6868
self.s4 = self.s3.astype('object')
6969

7070
def time_series_nlargest1(self):
71-
self.s1.nlargest(3, take_last=True)
72-
self.s1.nlargest(3, take_last=False)
71+
self.s1.nlargest(3, keep='last')
72+
self.s1.nlargest(3, keep='first')
7373

7474

7575
class series_nlargest2(object):
@@ -83,8 +83,8 @@ def setup(self):
8383
self.s4 = self.s3.astype('object')
8484

8585
def time_series_nlargest2(self):
86-
self.s2.nlargest(3, take_last=True)
87-
self.s2.nlargest(3, take_last=False)
86+
self.s2.nlargest(3, keep='last')
87+
self.s2.nlargest(3, keep='first')
8888

8989

9090
class series_nsmallest2(object):
@@ -98,8 +98,8 @@ def setup(self):
9898
self.s4 = self.s3.astype('object')
9999

100100
def time_series_nsmallest2(self):
101-
self.s2.nsmallest(3, take_last=True)
102-
self.s2.nsmallest(3, take_last=False)
101+
self.s2.nsmallest(3, keep='last')
102+
self.s2.nsmallest(3, keep='first')
103103

104104

105105
class series_dropna_int64(object):

doc/source/whatsnew/v0.20.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,7 @@ Removal of prior version deprecations/changes
769769
in favor of ``iloc`` and ``iat`` as explained :ref:`here <whatsnew_0170.deprecations>` (:issue:`10711`).
770770
- The deprecated ``DataFrame.iterkv()`` has been removed in favor of ``DataFrame.iteritems()`` (:issue:`10711`)
771771
- The ``Categorical`` constructor has dropped the ``name`` parameter (:issue:`10632`)
772+
- The ``take_last`` parameter has been dropped from ``duplicated()``, ``drop_duplicates()``, ``nlargest()``, and ``nsmallest()`` methods (:issue:`10236`, :issue:`10792`, :issue:`10920`)
772773

773774
.. _whatsnew_0200.performance:
774775

pandas/core/base.py

-6
Original file line numberDiff line numberDiff line change
@@ -1065,16 +1065,13 @@ def searchsorted(self, value, side='left', sorter=None):
10651065
- ``first`` : Drop duplicates except for the first occurrence.
10661066
- ``last`` : Drop duplicates except for the last occurrence.
10671067
- False : Drop all duplicates.
1068-
take_last : deprecated
10691068
%(inplace)s
10701069
10711070
Returns
10721071
-------
10731072
deduplicated : %(klass)s
10741073
""")
10751074

1076-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
1077-
False: 'first'})
10781075
@Appender(_shared_docs['drop_duplicates'] % _indexops_doc_kwargs)
10791076
def drop_duplicates(self, keep='first', inplace=False):
10801077
inplace = validate_bool_kwarg(inplace, 'inplace')
@@ -1100,15 +1097,12 @@ def drop_duplicates(self, keep='first', inplace=False):
11001097
- ``last`` : Mark duplicates as ``True`` except for the last
11011098
occurrence.
11021099
- False : Mark all duplicates as ``True``.
1103-
take_last : deprecated
11041100
11051101
Returns
11061102
-------
11071103
duplicated : %(duplicated)s
11081104
""")
11091105

1110-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
1111-
False: 'first'})
11121106
@Appender(_shared_docs['duplicated'] % _indexops_doc_kwargs)
11131107
def duplicated(self, keep='first'):
11141108
from pandas.core.algorithms import duplicated

pandas/core/frame.py

-6
Original file line numberDiff line numberDiff line change
@@ -3169,8 +3169,6 @@ def dropna(self, axis=0, how='any', thresh=None, subset=None,
31693169
else:
31703170
return result
31713171

3172-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
3173-
False: 'first'})
31743172
def drop_duplicates(self, subset=None, keep='first', inplace=False):
31753173
"""
31763174
Return DataFrame with duplicate rows removed, optionally only
@@ -3185,7 +3183,6 @@ def drop_duplicates(self, subset=None, keep='first', inplace=False):
31853183
- ``first`` : Drop duplicates except for the first occurrence.
31863184
- ``last`` : Drop duplicates except for the last occurrence.
31873185
- False : Drop all duplicates.
3188-
take_last : deprecated
31893186
inplace : boolean, default False
31903187
Whether to drop duplicates in place or to return a copy
31913188
@@ -3203,8 +3200,6 @@ def drop_duplicates(self, subset=None, keep='first', inplace=False):
32033200
else:
32043201
return self[-duplicated]
32053202

3206-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
3207-
False: 'first'})
32083203
def duplicated(self, subset=None, keep='first'):
32093204
"""
32103205
Return boolean Series denoting duplicate rows, optionally only
@@ -3221,7 +3216,6 @@ def duplicated(self, subset=None, keep='first'):
32213216
- ``last`` : Mark duplicates as ``True`` except for the
32223217
last occurrence.
32233218
- False : Mark all duplicates as ``True``.
3224-
take_last : deprecated
32253219
32263220
Returns
32273221
-------

pandas/core/groupby.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -3025,16 +3025,12 @@ def nunique(self, dropna=True):
30253025
index=ri,
30263026
name=self.name)
30273027

3028-
@deprecate_kwarg('take_last', 'keep',
3029-
mapping={True: 'last', False: 'first'})
30303028
@Appender(Series.nlargest.__doc__)
30313029
def nlargest(self, n=5, keep='first'):
3032-
# ToDo: When we remove deprecate_kwargs, we can remote these methods
3030+
# TODO: When we remove deprecate_kwargs, we can remove these methods
30333031
# and include nlargest and nsmallest to _series_apply_whitelist
30343032
return self.apply(lambda x: x.nlargest(n=n, keep=keep))
30353033

3036-
@deprecate_kwarg('take_last', 'keep',
3037-
mapping={True: 'last', False: 'first'})
30383034
@Appender(Series.nsmallest.__doc__)
30393035
def nsmallest(self, n=5, keep='first'):
30403036
return self.apply(lambda x: x.nsmallest(n=n, keep=keep))

pandas/core/series.py

-4
Original file line numberDiff line numberDiff line change
@@ -1211,14 +1211,10 @@ def unique(self):
12111211
return result.asobject.values
12121212
return result
12131213

1214-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
1215-
False: 'first'})
12161214
@Appender(base._shared_docs['drop_duplicates'] % _shared_doc_kwargs)
12171215
def drop_duplicates(self, keep='first', inplace=False):
12181216
return super(Series, self).drop_duplicates(keep=keep, inplace=inplace)
12191217

1220-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
1221-
False: 'first'})
12221218
@Appender(base._shared_docs['duplicated'] % _shared_doc_kwargs)
12231219
def duplicated(self, keep='first'):
12241220
return super(Series, self).duplicated(keep=keep)

pandas/indexes/base.py

-4
Original file line numberDiff line numberDiff line change
@@ -3500,14 +3500,10 @@ def unique(self):
35003500
result = super(Index, self).unique()
35013501
return self._shallow_copy(result)
35023502

3503-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
3504-
False: 'first'})
35053503
@Appender(base._shared_docs['drop_duplicates'] % _index_doc_kwargs)
35063504
def drop_duplicates(self, keep='first'):
35073505
return super(Index, self).drop_duplicates(keep=keep)
35083506

3509-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
3510-
False: 'first'})
35113507
@Appender(base._shared_docs['duplicated'] % _index_doc_kwargs)
35123508
def duplicated(self, keep='first'):
35133509
return super(Index, self).duplicated(keep=keep)

pandas/indexes/category.py

-2
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,6 @@ def unique(self):
301301
return self._shallow_copy(result, categories=result.categories,
302302
ordered=result.ordered)
303303

304-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
305-
False: 'first'})
306304
@Appender(base._shared_docs['duplicated'] % _index_doc_kwargs)
307305
def duplicated(self, keep='first'):
308306
from pandas._libs.hashtable import duplicated_int64

pandas/indexes/multi.py

-2
Original file line numberDiff line numberDiff line change
@@ -755,8 +755,6 @@ def f(k, stringify):
755755
for k, stringify in zip(key, self._have_mixed_levels)])
756756
return hash_tuples(key)
757757

758-
@deprecate_kwarg('take_last', 'keep', mapping={True: 'last',
759-
False: 'first'})
760758
@Appender(base._shared_docs['duplicated'] % _index_doc_kwargs)
761759
def duplicated(self, keep='first'):
762760
from pandas.core.sorting import get_group_index

pandas/tests/frame/test_analytics.py

-75
Original file line numberDiff line numberDiff line change
@@ -1381,12 +1381,6 @@ def test_drop_duplicates(self):
13811381
tm.assert_frame_equal(result, expected)
13821382
self.assertEqual(len(result), 0)
13831383

1384-
# deprecate take_last
1385-
with tm.assert_produces_warning(FutureWarning):
1386-
result = df.drop_duplicates('AAA', take_last=True)
1387-
expected = df.loc[[6, 7]]
1388-
tm.assert_frame_equal(result, expected)
1389-
13901384
# multi column
13911385
expected = df.loc[[0, 1, 2, 3]]
13921386
result = df.drop_duplicates(np.array(['AAA', 'B']))
@@ -1402,12 +1396,6 @@ def test_drop_duplicates(self):
14021396
expected = df.loc[[0]]
14031397
tm.assert_frame_equal(result, expected)
14041398

1405-
# deprecate take_last
1406-
with tm.assert_produces_warning(FutureWarning):
1407-
result = df.drop_duplicates(('AAA', 'B'), take_last=True)
1408-
expected = df.loc[[0, 5, 6, 7]]
1409-
tm.assert_frame_equal(result, expected)
1410-
14111399
# consider everything
14121400
df2 = df.loc[:, ['AAA', 'B', 'C']]
14131401

@@ -1424,13 +1412,6 @@ def test_drop_duplicates(self):
14241412
expected = df2.drop_duplicates(['AAA', 'B'], keep=False)
14251413
tm.assert_frame_equal(result, expected)
14261414

1427-
# deprecate take_last
1428-
with tm.assert_produces_warning(FutureWarning):
1429-
result = df2.drop_duplicates(take_last=True)
1430-
with tm.assert_produces_warning(FutureWarning):
1431-
expected = df2.drop_duplicates(['AAA', 'B'], take_last=True)
1432-
tm.assert_frame_equal(result, expected)
1433-
14341415
# integers
14351416
result = df.drop_duplicates('C')
14361417
expected = df.iloc[[0, 2]]
@@ -1529,12 +1510,6 @@ def test_drop_duplicates_tuple(self):
15291510
self.assertEqual(len(result), 0)
15301511
tm.assert_frame_equal(result, expected)
15311512

1532-
# deprecate take_last
1533-
with tm.assert_produces_warning(FutureWarning):
1534-
result = df.drop_duplicates(('AA', 'AB'), take_last=True)
1535-
expected = df.loc[[6, 7]]
1536-
tm.assert_frame_equal(result, expected)
1537-
15381513
# multi column
15391514
expected = df.loc[[0, 1, 2, 3]]
15401515
result = df.drop_duplicates((('AA', 'AB'), 'B'))
@@ -1563,12 +1538,6 @@ def test_drop_duplicates_NA(self):
15631538
tm.assert_frame_equal(result, expected)
15641539
self.assertEqual(len(result), 0)
15651540

1566-
# deprecate take_last
1567-
with tm.assert_produces_warning(FutureWarning):
1568-
result = df.drop_duplicates('A', take_last=True)
1569-
expected = df.loc[[1, 6, 7]]
1570-
tm.assert_frame_equal(result, expected)
1571-
15721541
# multi column
15731542
result = df.drop_duplicates(['A', 'B'])
15741543
expected = df.loc[[0, 2, 3, 6]]
@@ -1582,12 +1551,6 @@ def test_drop_duplicates_NA(self):
15821551
expected = df.loc[[6]]
15831552
tm.assert_frame_equal(result, expected)
15841553

1585-
# deprecate take_last
1586-
with tm.assert_produces_warning(FutureWarning):
1587-
result = df.drop_duplicates(['A', 'B'], take_last=True)
1588-
expected = df.loc[[1, 5, 6, 7]]
1589-
tm.assert_frame_equal(result, expected)
1590-
15911554
# nan
15921555
df = DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
15931556
'foo', 'bar', 'bar', 'foo'],
@@ -1610,12 +1573,6 @@ def test_drop_duplicates_NA(self):
16101573
tm.assert_frame_equal(result, expected)
16111574
self.assertEqual(len(result), 0)
16121575

1613-
# deprecate take_last
1614-
with tm.assert_produces_warning(FutureWarning):
1615-
result = df.drop_duplicates('C', take_last=True)
1616-
expected = df.loc[[3, 7]]
1617-
tm.assert_frame_equal(result, expected)
1618-
16191576
# multi column
16201577
result = df.drop_duplicates(['C', 'B'])
16211578
expected = df.loc[[0, 1, 2, 4]]
@@ -1629,12 +1586,6 @@ def test_drop_duplicates_NA(self):
16291586
expected = df.loc[[1]]
16301587
tm.assert_frame_equal(result, expected)
16311588

1632-
# deprecate take_last
1633-
with tm.assert_produces_warning(FutureWarning):
1634-
result = df.drop_duplicates(['C', 'B'], take_last=True)
1635-
expected = df.loc[[1, 3, 6, 7]]
1636-
tm.assert_frame_equal(result, expected)
1637-
16381589
def test_drop_duplicates_NA_for_take_all(self):
16391590
# none
16401591
df = DataFrame({'A': [None, None, 'foo', 'bar',
@@ -1697,14 +1648,6 @@ def test_drop_duplicates_inplace(self):
16971648
tm.assert_frame_equal(result, expected)
16981649
self.assertEqual(len(df), 0)
16991650

1700-
# deprecate take_last
1701-
df = orig.copy()
1702-
with tm.assert_produces_warning(FutureWarning):
1703-
df.drop_duplicates('A', take_last=True, inplace=True)
1704-
expected = orig.loc[[6, 7]]
1705-
result = df
1706-
tm.assert_frame_equal(result, expected)
1707-
17081651
# multi column
17091652
df = orig.copy()
17101653
df.drop_duplicates(['A', 'B'], inplace=True)
@@ -1724,14 +1667,6 @@ def test_drop_duplicates_inplace(self):
17241667
result = df
17251668
tm.assert_frame_equal(result, expected)
17261669

1727-
# deprecate take_last
1728-
df = orig.copy()
1729-
with tm.assert_produces_warning(FutureWarning):
1730-
df.drop_duplicates(['A', 'B'], take_last=True, inplace=True)
1731-
expected = orig.loc[[0, 5, 6, 7]]
1732-
result = df
1733-
tm.assert_frame_equal(result, expected)
1734-
17351670
# consider everything
17361671
orig2 = orig.loc[:, ['A', 'B', 'C']].copy()
17371672

@@ -1754,17 +1689,7 @@ def test_drop_duplicates_inplace(self):
17541689
result = df2
17551690
tm.assert_frame_equal(result, expected)
17561691

1757-
# deprecate take_last
1758-
df2 = orig2.copy()
1759-
with tm.assert_produces_warning(FutureWarning):
1760-
df2.drop_duplicates(take_last=True, inplace=True)
1761-
with tm.assert_produces_warning(FutureWarning):
1762-
expected = orig2.drop_duplicates(['A', 'B'], take_last=True)
1763-
result = df2
1764-
tm.assert_frame_equal(result, expected)
1765-
17661692
# Rounding
1767-
17681693
def test_round(self):
17691694
# GH 2665
17701695

pandas/tests/groupby/test_groupby.py

-4
Original file line numberDiff line numberDiff line change
@@ -4025,8 +4025,6 @@ def test_nlargest(self):
40254025
3, 2, 1, 3, 3, 2
40264026
], index=MultiIndex.from_arrays([list('aaabbb'), [2, 3, 1, 6, 5, 7]]))
40274027
assert_series_equal(gb.nlargest(3, keep='last'), e)
4028-
with tm.assert_produces_warning(FutureWarning):
4029-
assert_series_equal(gb.nlargest(3, take_last=True), e)
40304028

40314029
def test_nsmallest(self):
40324030
a = Series([1, 3, 5, 7, 2, 9, 0, 4, 6, 10])
@@ -4044,8 +4042,6 @@ def test_nsmallest(self):
40444042
0, 1, 1, 0, 1, 2
40454043
], index=MultiIndex.from_arrays([list('aaabbb'), [4, 1, 0, 9, 8, 7]]))
40464044
assert_series_equal(gb.nsmallest(3, keep='last'), e)
4047-
with tm.assert_produces_warning(FutureWarning):
4048-
assert_series_equal(gb.nsmallest(3, take_last=True), e)
40494045

40504046
def test_transform_doesnt_clobber_ints(self):
40514047
# GH 7972

pandas/tests/series/test_analytics.py

-33
Original file line numberDiff line numberDiff line change
@@ -917,17 +917,6 @@ def test_drop_duplicates(self):
917917
sc.drop_duplicates(keep='last', inplace=True)
918918
assert_series_equal(sc, s[~expected])
919919

920-
# deprecate take_last
921-
with tm.assert_produces_warning(FutureWarning):
922-
assert_series_equal(s.duplicated(take_last=True), expected)
923-
with tm.assert_produces_warning(FutureWarning):
924-
assert_series_equal(
925-
s.drop_duplicates(take_last=True), s[~expected])
926-
sc = s.copy()
927-
with tm.assert_produces_warning(FutureWarning):
928-
sc.drop_duplicates(take_last=True, inplace=True)
929-
assert_series_equal(sc, s[~expected])
930-
931920
expected = Series([False, False, True, True])
932921
assert_series_equal(s.duplicated(keep=False), expected)
933922
assert_series_equal(s.drop_duplicates(keep=False), s[~expected])
@@ -951,17 +940,6 @@ def test_drop_duplicates(self):
951940
sc.drop_duplicates(keep='last', inplace=True)
952941
assert_series_equal(sc, s[~expected])
953942

954-
# deprecate take_last
955-
with tm.assert_produces_warning(FutureWarning):
956-
assert_series_equal(s.duplicated(take_last=True), expected)
957-
with tm.assert_produces_warning(FutureWarning):
958-
assert_series_equal(
959-
s.drop_duplicates(take_last=True), s[~expected])
960-
sc = s.copy()
961-
with tm.assert_produces_warning(FutureWarning):
962-
sc.drop_duplicates(take_last=True, inplace=True)
963-
assert_series_equal(sc, s[~expected])
964-
965943
expected = Series([False, True, True, False, True, True, False])
966944
assert_series_equal(s.duplicated(keep=False), expected)
967945
assert_series_equal(s.drop_duplicates(keep=False), s[~expected])
@@ -1443,18 +1421,7 @@ def test_nsmallest_nlargest(self):
14431421
for s in s_list:
14441422

14451423
assert_series_equal(s.nsmallest(2), s.iloc[[2, 1]])
1446-
14471424
assert_series_equal(s.nsmallest(2, keep='last'), s.iloc[[2, 3]])
1448-
with tm.assert_produces_warning(FutureWarning):
1449-
assert_series_equal(
1450-
s.nsmallest(2, take_last=True), s.iloc[[2, 3]])
1451-
1452-
assert_series_equal(s.nlargest(3), s.iloc[[4, 0, 1]])
1453-
1454-
assert_series_equal(s.nlargest(3, keep='last'), s.iloc[[4, 0, 3]])
1455-
with tm.assert_produces_warning(FutureWarning):
1456-
assert_series_equal(
1457-
s.nlargest(3, take_last=True), s.iloc[[4, 0, 3]])
14581425

14591426
empty = s.iloc[0:0]
14601427
assert_series_equal(s.nsmallest(0), empty)

0 commit comments

Comments
 (0)