Skip to content

Commit 6386b24

Browse files
committed
TST: parametrize test on series
1 parent 2e46565 commit 6386b24

File tree

2 files changed

+98
-92
lines changed

2 files changed

+98
-92
lines changed

pandas/tests/frame/test_analytics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1916,7 +1916,7 @@ def df_strings():
19161916
'c': np.random.permutation(10).astype('float64')})
19171917

19181918

1919-
class TestNLargestSmallest(object):
1919+
class TestNLargestNSmallest(object):
19201920

19211921
# ----------------------------------------------------------------------
19221922
# Top / bottom

pandas/tests/series/test_analytics.py

Lines changed: 97 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,97 +1381,6 @@ def test_is_monotonic(self):
13811381
self.assertFalse(s.is_monotonic)
13821382
self.assertTrue(s.is_monotonic_decreasing)
13831383

1384-
def test_nsmallest_nlargest(self):
1385-
# float, int, datetime64 (use i8), timedelts64 (same),
1386-
# object that are numbers, object that are strings
1387-
1388-
base = [3, 2, 1, 2, 5]
1389-
1390-
s_list = [
1391-
Series(base, dtype='int8'),
1392-
Series(base, dtype='int16'),
1393-
Series(base, dtype='int32'),
1394-
Series(base, dtype='int64'),
1395-
Series(base, dtype='float32'),
1396-
Series(base, dtype='float64'),
1397-
Series(base, dtype='uint8'),
1398-
Series(base, dtype='uint16'),
1399-
Series(base, dtype='uint32'),
1400-
Series(base, dtype='uint64'),
1401-
Series(base).astype('timedelta64[ns]'),
1402-
Series(pd.to_datetime(['2003', '2002', '2001', '2002', '2005'])),
1403-
]
1404-
1405-
raising = [
1406-
Series([3., 2, 1, 2, '5'], dtype='object'),
1407-
Series([3., 2, 1, 2, 5], dtype='object'),
1408-
# not supported on some archs
1409-
# Series([3., 2, 1, 2, 5], dtype='complex256'),
1410-
Series([3., 2, 1, 2, 5], dtype='complex128'),
1411-
]
1412-
1413-
for r in raising:
1414-
dt = r.dtype
1415-
msg = "Cannot use method 'n(larg|small)est' with dtype %s" % dt
1416-
args = 2, len(r), 0, -1
1417-
methods = r.nlargest, r.nsmallest
1418-
for method, arg in product(methods, args):
1419-
with tm.assertRaisesRegexp(TypeError, msg):
1420-
method(arg)
1421-
1422-
for s in s_list:
1423-
1424-
assert_series_equal(s.nsmallest(2), s.iloc[[2, 1]])
1425-
assert_series_equal(s.nsmallest(2, keep='last'), s.iloc[[2, 3]])
1426-
1427-
empty = s.iloc[0:0]
1428-
assert_series_equal(s.nsmallest(0), empty)
1429-
assert_series_equal(s.nsmallest(-1), empty)
1430-
assert_series_equal(s.nlargest(0), empty)
1431-
assert_series_equal(s.nlargest(-1), empty)
1432-
1433-
assert_series_equal(s.nsmallest(len(s)), s.sort_values())
1434-
assert_series_equal(s.nsmallest(len(s) + 1), s.sort_values())
1435-
assert_series_equal(s.nlargest(len(s)), s.iloc[[4, 0, 1, 3, 2]])
1436-
assert_series_equal(s.nlargest(len(s) + 1),
1437-
s.iloc[[4, 0, 1, 3, 2]])
1438-
1439-
s = Series([3., np.nan, 1, 2, 5])
1440-
assert_series_equal(s.nlargest(), s.iloc[[4, 0, 3, 2]])
1441-
assert_series_equal(s.nsmallest(), s.iloc[[2, 3, 0, 4]])
1442-
1443-
msg = 'keep must be either "first", "last"'
1444-
with tm.assertRaisesRegexp(ValueError, msg):
1445-
s.nsmallest(keep='invalid')
1446-
with tm.assertRaisesRegexp(ValueError, msg):
1447-
s.nlargest(keep='invalid')
1448-
1449-
# GH 13412
1450-
s = Series([1, 4, 3, 2], index=[0, 0, 1, 1])
1451-
result = s.nlargest(3)
1452-
expected = s.sort_values(ascending=False).head(3)
1453-
assert_series_equal(result, expected)
1454-
result = s.nsmallest(3)
1455-
expected = s.sort_values().head(3)
1456-
assert_series_equal(result, expected)
1457-
1458-
# GH 15297
1459-
s = Series([1] * 5, index=[1, 2, 3, 4, 5])
1460-
expected_first = Series([1] * 3, index=[1, 2, 3])
1461-
expected_last = Series([1] * 3, index=[5, 4, 3])
1462-
1463-
result = s.nsmallest(3)
1464-
assert_series_equal(result, expected_first)
1465-
1466-
result = s.nsmallest(3, keep='last')
1467-
assert_series_equal(result, expected_last)
1468-
1469-
result = s.nlargest(3)
1470-
assert_series_equal(result, expected_first)
1471-
1472-
result = s.nlargest(3, keep='last')
1473-
assert_series_equal(result, expected_last)
1474-
14751384
def test_sort_index_level(self):
14761385
mi = MultiIndex.from_tuples([[1, 1, 3], [1, 1, 1]], names=list('ABC'))
14771386
s = Series([1, 2], mi)
@@ -1746,3 +1655,100 @@ def test_value_counts_categorical_not_ordered(self):
17461655
index=exp_idx, name='xxx')
17471656
tm.assert_series_equal(s.value_counts(normalize=True), exp)
17481657
tm.assert_series_equal(idx.value_counts(normalize=True), exp)
1658+
1659+
1660+
base = [3, 2, 1, 2, 5]
1661+
1662+
1663+
class TestNLargestNSmallest(object):
1664+
1665+
@pytest.mark.parametrize(
1666+
"r", [Series([3., 2, 1, 2, '5'], dtype='object'),
1667+
Series([3., 2, 1, 2, 5], dtype='object'),
1668+
# not supported on some archs
1669+
# Series([3., 2, 1, 2, 5], dtype='complex256'),
1670+
Series([3., 2, 1, 2, 5], dtype='complex128')])
1671+
def test_error(self, r):
1672+
dt = r.dtype
1673+
msg = "Cannot use method 'n(larg|small)est' with dtype %s" % dt
1674+
args = 2, len(r), 0, -1
1675+
methods = r.nlargest, r.nsmallest
1676+
for method, arg in product(methods, args):
1677+
with tm.assertRaisesRegexp(TypeError, msg):
1678+
method(arg)
1679+
1680+
@pytest.mark.parametrize(
1681+
"s", [Series(base, dtype='int8'),
1682+
Series(base, dtype='int16'),
1683+
Series(base, dtype='int32'),
1684+
Series(base, dtype='int64'),
1685+
Series(base, dtype='float32'),
1686+
Series(base, dtype='float64'),
1687+
Series(base, dtype='uint8'),
1688+
Series(base, dtype='uint16'),
1689+
Series(base, dtype='uint32'),
1690+
Series(base, dtype='uint64'),
1691+
Series(base).astype('timedelta64[ns]'),
1692+
Series(pd.to_datetime(['2003', '2002',
1693+
'2001', '2002',
1694+
'2005']))])
1695+
def test_nsmallest_nlargest(self, s):
1696+
# float, int, datetime64 (use i8), timedelts64 (same),
1697+
# object that are numbers, object that are strings
1698+
1699+
assert_series_equal(s.nsmallest(2), s.iloc[[2, 1]])
1700+
assert_series_equal(s.nsmallest(2, keep='last'), s.iloc[[2, 3]])
1701+
1702+
empty = s.iloc[0:0]
1703+
assert_series_equal(s.nsmallest(0), empty)
1704+
assert_series_equal(s.nsmallest(-1), empty)
1705+
assert_series_equal(s.nlargest(0), empty)
1706+
assert_series_equal(s.nlargest(-1), empty)
1707+
1708+
assert_series_equal(s.nsmallest(len(s)), s.sort_values())
1709+
assert_series_equal(s.nsmallest(len(s) + 1), s.sort_values())
1710+
assert_series_equal(s.nlargest(len(s)), s.iloc[[4, 0, 1, 3, 2]])
1711+
assert_series_equal(s.nlargest(len(s) + 1),
1712+
s.iloc[[4, 0, 1, 3, 2]])
1713+
1714+
def test_misc(self):
1715+
1716+
s = Series([3., np.nan, 1, 2, 5])
1717+
assert_series_equal(s.nlargest(), s.iloc[[4, 0, 3, 2]])
1718+
assert_series_equal(s.nsmallest(), s.iloc[[2, 3, 0, 4]])
1719+
1720+
msg = 'keep must be either "first", "last"'
1721+
with tm.assertRaisesRegexp(ValueError, msg):
1722+
s.nsmallest(keep='invalid')
1723+
with tm.assertRaisesRegexp(ValueError, msg):
1724+
s.nlargest(keep='invalid')
1725+
1726+
# GH 15297
1727+
s = Series([1] * 5, index=[1, 2, 3, 4, 5])
1728+
expected_first = Series([1] * 3, index=[1, 2, 3])
1729+
expected_last = Series([1] * 3, index=[5, 4, 3])
1730+
1731+
result = s.nsmallest(3)
1732+
assert_series_equal(result, expected_first)
1733+
1734+
result = s.nsmallest(3, keep='last')
1735+
assert_series_equal(result, expected_last)
1736+
1737+
result = s.nlargest(3)
1738+
assert_series_equal(result, expected_first)
1739+
1740+
result = s.nlargest(3, keep='last')
1741+
assert_series_equal(result, expected_last)
1742+
1743+
@pytest.mark.parametrize('n', range(1, 5))
1744+
def test_n(self, n):
1745+
1746+
# GH 13412
1747+
s = Series([1, 4, 3, 2], index=[0, 0, 1, 1])
1748+
result = s.nlargest(n)
1749+
expected = s.sort_values(ascending=False).head(n)
1750+
assert_series_equal(result, expected)
1751+
1752+
result = s.nsmallest(n)
1753+
expected = s.sort_values().head(n)
1754+
assert_series_equal(result, expected)

0 commit comments

Comments
 (0)