Skip to content

Commit 41e4227

Browse files
committed
change to 0.24 and parametrize series tests
1 parent 8c63eb2 commit 41e4227

File tree

6 files changed

+61
-43
lines changed

6 files changed

+61
-43
lines changed

doc/source/whatsnew/v0.24.0.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ New features
1212

1313
Other Enhancements
1414
^^^^^^^^^^^^^^^^^^
15-
-
15+
- :func:`Series.mode` and :func:`DataFrame.mode` now support the ``dropna`` parameter which can be used to specify whether NaN/NaT values should be considered (:issue:`17534`)
1616
-
1717
-
1818

pandas/core/algorithms.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ def mode(values, dropna=True):
809809
dropna : boolean, default True
810810
Don't consider counts of NaN/NaT.
811811
812-
.. versionadded:: 0.23.0
812+
.. versionadded:: 0.24.0
813813
814814
Returns
815815
-------

pandas/core/arrays/categorical.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2128,7 +2128,7 @@ def mode(self, dropna=True):
21282128
dropna : boolean, default True
21292129
Don't consider counts of NaN/NaT.
21302130
2131-
.. versionadded:: 0.23.0
2131+
.. versionadded:: 0.24.0
21322132
21332133
Returns
21342134
-------

pandas/core/frame.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7057,7 +7057,7 @@ def mode(self, axis=0, numeric_only=False, dropna=True):
70577057
dropna : boolean, default True
70587058
Don't consider counts of NaN/NaT.
70597059
7060-
.. versionadded:: 0.23.0
7060+
.. versionadded:: 0.24.0
70617061
70627062
Returns
70637063
-------

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1441,7 +1441,7 @@ def mode(self, dropna=True):
14411441
dropna : boolean, default True
14421442
Don't consider counts of NaN/NaT.
14431443
1444-
.. versionadded:: 0.23.0
1444+
.. versionadded:: 0.24.0
14451445
14461446
Returns
14471447
-------

pandas/tests/series/test_analytics.py

+56-38
Original file line numberDiff line numberDiff line change
@@ -231,28 +231,34 @@ def test_median(self):
231231
])
232232
def test_mode_empty(self, dropna, expected):
233233
s = Series([], dtype=np.float64)
234-
tm.assert_series_equal(s.mode(dropna), expected)
234+
result = s.mode(dropna)
235+
tm.assert_series_equal(result, expected)
235236

236-
@pytest.mark.parametrize('dropna, expected1, expected2, expected3', [
237-
(True, [1], [1, 3], [1.0]),
238-
(False, [1], [1, 3], [1, np.nan]),
237+
@pytest.mark.parametrize('dropna, data, expected', [
238+
(True, [1, 1, 1, 2], [1]),
239+
(True, [1, 1, 1, 2, 3, 3, 3], [1, 3]),
240+
(False, [1, 1, 1, 2], [1]),
241+
(False, [1, 1, 1, 2, 3, 3, 3], [1, 3]),
239242
])
240-
def test_mode_numerical(self, dropna, expected1, expected2, expected3):
241-
data_single = [1] * 5 + [2] * 3
242-
data_multi = [1] * 5 + [2] * 3 + [3] * 5
243-
244-
for dt in np.typecodes['AllInteger'] + np.typecodes['Float']:
245-
s = Series(data_single, dtype=dt)
246-
expected1 = Series(expected1, dtype=dt)
247-
tm.assert_series_equal(s.mode(dropna), expected1)
248-
249-
s = Series(data_multi, dtype=dt)
250-
expected2 = Series(expected2, dtype=dt)
251-
tm.assert_series_equal(s.mode(dropna), expected2)
243+
@pytest.mark.parametrize(
244+
'dt',
245+
list(np.typecodes['AllInteger'] + np.typecodes['Float'])
246+
)
247+
def test_mode_numerical(self, dropna, data, expected, dt):
248+
s = Series(data, dtype=dt)
249+
result = s.mode(dropna)
250+
expected = Series(expected, dtype=dt)
251+
tm.assert_series_equal(result, expected)
252252

253-
s = Series([1, np.nan])
254-
expected = Series(expected3)
255-
tm.assert_series_equal(s.mode(dropna), expected)
253+
@pytest.mark.parametrize('dropna, expected', [
254+
(True, [1.0]),
255+
(False, [1, np.nan]),
256+
])
257+
def test_mode_numerical_nan(self, dropna, expected):
258+
s = Series([1, 1, 2, np.nan, np.nan])
259+
result = s.mode(dropna)
260+
expected = Series(expected)
261+
tm.assert_series_equal(result, expected)
256262

257263
@pytest.mark.parametrize('dropna, expected1, expected2, expected3', [
258264
(True, ['b'], ['bar'], ['nan']),
@@ -263,34 +269,37 @@ def test_mode_str_obj(self, dropna, expected1, expected2, expected3):
263269
data = ['a'] * 2 + ['b'] * 3
264270

265271
s = Series(data, dtype='c')
272+
result = s.mode(dropna)
266273
expected1 = Series(expected1, dtype='c')
267-
tm.assert_series_equal(s.mode(dropna), expected1)
274+
tm.assert_series_equal(result, expected1)
268275

269276
data = ['foo', 'bar', 'bar', np.nan, np.nan, np.nan]
270277

271278
s = Series(data, dtype=object)
272-
expected2 = Series(expected2, dtype=object)
273279
result = s.mode(dropna).sort_values().reset_index(drop=True)
280+
expected2 = Series(expected2, dtype=object)
274281
tm.assert_series_equal(result, expected2)
275282

276283
data = ['foo', 'bar', 'bar', np.nan, np.nan, np.nan]
277284

278285
s = Series(data, dtype=str)
286+
result = s.mode(dropna)
279287
expected3 = Series(expected3, dtype=str)
280-
tm.assert_series_equal(s.mode(dropna), expected3)
288+
tm.assert_series_equal(result, expected3)
281289

282290
@pytest.mark.parametrize('dropna, expected1, expected2', [
283291
(True, ['foo'], ['foo']),
284292
(False, ['foo'], [np.nan])
285293
])
286294
def test_mode_mixeddtype(self, dropna, expected1, expected2):
287-
expected = Series(expected1)
288295
s = Series([1, 'foo', 'foo'])
289-
tm.assert_series_equal(s.mode(dropna), expected)
296+
result = s.mode(dropna)
297+
expected = Series(expected1)
298+
tm.assert_series_equal(result, expected)
290299

291-
expected = Series(expected2, dtype=object)
292300
s = Series([1, 'foo', 'foo', np.nan, np.nan, np.nan])
293301
result = s.mode(dropna).sort_values().reset_index(drop=True)
302+
expected = Series(expected2, dtype=object)
294303
tm.assert_series_equal(result, expected)
295304

296305
@pytest.mark.parametrize('dropna, expected1, expected2', [
@@ -299,16 +308,18 @@ def test_mode_mixeddtype(self, dropna, expected1, expected2):
299308
(False, [np.nan], [np.nan, '2011-01-03', '2013-01-02']),
300309
])
301310
def test_mode_datetime(self, dropna, expected1, expected2):
302-
expected1 = Series(expected1, dtype='M8[ns]')
303311
s = Series(['2011-01-03', '2013-01-02',
304312
'1900-05-03', 'nan', 'nan'], dtype='M8[ns]')
305-
tm.assert_series_equal(s.mode(dropna), expected1)
313+
result = s.mode(dropna)
314+
expected1 = Series(expected1, dtype='M8[ns]')
315+
tm.assert_series_equal(result, expected1)
306316

307-
expected2 = Series(expected2, dtype='M8[ns]')
308317
s = Series(['2011-01-03', '2013-01-02', '1900-05-03',
309318
'2011-01-03', '2013-01-02', 'nan', 'nan'],
310319
dtype='M8[ns]')
311-
tm.assert_series_equal(s.mode(dropna), expected2)
320+
result = s.mode(dropna)
321+
expected2 = Series(expected2, dtype='M8[ns]')
322+
tm.assert_series_equal(result, expected2)
312323

313324
@pytest.mark.parametrize('dropna, expected1, expected2', [
314325
(True, ['-1 days', '0 days', '1 days'], ['2 min', '1 day']),
@@ -319,14 +330,16 @@ def test_mode_timedelta(self, dropna, expected1, expected2):
319330

320331
s = Series(['1 days', '-1 days', '0 days', 'nan', 'nan'],
321332
dtype='timedelta64[ns]')
333+
result = s.mode(dropna)
322334
expected1 = Series(expected1, dtype='timedelta64[ns]')
323-
tm.assert_series_equal(s.mode(dropna), expected1)
335+
tm.assert_series_equal(result, expected1)
324336

325337
s = Series(['1 day', '1 day', '-1 day', '-1 day 2 min',
326338
'2 min', '2 min', 'nan', 'nan'],
327339
dtype='timedelta64[ns]')
340+
result = s.mode(dropna)
328341
expected2 = Series(expected2, dtype='timedelta64[ns]')
329-
tm.assert_series_equal(s.mode(dropna), expected2)
342+
tm.assert_series_equal(result, expected2)
330343

331344
@pytest.mark.parametrize('dropna, expected1, expected2, expected3', [
332345
(True, Categorical([1, 2], categories=[1, 2]),
@@ -338,30 +351,35 @@ def test_mode_timedelta(self, dropna, expected1, expected2):
338351
])
339352
def test_mode_category(self, dropna, expected1, expected2, expected3):
340353
s = Series(Categorical([1, 2, np.nan, np.nan]))
354+
result = s.mode(dropna)
341355
expected1 = Series(expected1, dtype='category')
342-
tm.assert_series_equal(s.mode(dropna), expected1)
356+
tm.assert_series_equal(result, expected1)
343357

344358
s = Series(Categorical([1, 'a', 'a', np.nan, np.nan]))
359+
result = s.mode(dropna)
345360
expected2 = Series(expected2, dtype='category')
346-
tm.assert_series_equal(s.mode(dropna), expected2)
361+
tm.assert_series_equal(result, expected2)
347362

348363
s = Series(Categorical([1, 1, 2, 3, 3, np.nan, np.nan]))
364+
result = s.mode(dropna)
349365
expected3 = Series(expected3, dtype='category')
350-
tm.assert_series_equal(s.mode(dropna), expected3)
366+
tm.assert_series_equal(result, expected3)
351367

352368
@pytest.mark.parametrize('dropna, expected1, expected2', [
353369
(True, [2**63], [1, 2**63]),
354370
(False, [2**63], [1, 2**63])
355371
])
356372
def test_mode_intoverflow(self, dropna, expected1, expected2):
357373
# Test for uint64 overflow.
358-
expected1 = Series(expected1, dtype=np.uint64)
359374
s = Series([1, 2**63, 2**63], dtype=np.uint64)
360-
tm.assert_series_equal(s.mode(dropna), expected1)
375+
result = s.mode(dropna)
376+
expected1 = Series(expected1, dtype=np.uint64)
377+
tm.assert_series_equal(result, expected1)
361378

362-
expected2 = Series(expected2, dtype=np.uint64)
363379
s = Series([1, 2**63], dtype=np.uint64)
364-
tm.assert_series_equal(s.mode(dropna), expected2)
380+
result = s.mode(dropna)
381+
expected2 = Series(expected2, dtype=np.uint64)
382+
tm.assert_series_equal(result, expected2)
365383

366384
@pytest.mark.skipif(not compat.PY3, reason="only PY3")
367385
def test_mode_sortwarning(self):

0 commit comments

Comments
 (0)