Skip to content

Commit 70e06d1

Browse files
committed
Factor out Series sorting tests to own file.
1 parent 8e9fb62 commit 70e06d1

File tree

2 files changed

+151
-136
lines changed

2 files changed

+151
-136
lines changed

pandas/tests/series/test_analytics.py

Lines changed: 0 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from distutils.version import LooseVersion
66

77
import nose
8-
import random
98

109
from numpy import nan
1110
import numpy as np
@@ -1414,141 +1413,6 @@ def test_is_monotonic(self):
14141413
self.assertFalse(s.is_monotonic)
14151414
self.assertTrue(s.is_monotonic_decreasing)
14161415

1417-
def test_sort_values(self):
1418-
1419-
ts = self.ts.copy()
1420-
1421-
# 9816 deprecated
1422-
with tm.assert_produces_warning(FutureWarning):
1423-
ts.sort()
1424-
1425-
self.assert_series_equal(ts, self.ts.sort_values())
1426-
self.assert_index_equal(ts.index, self.ts.sort_values().index)
1427-
1428-
ts.sort_values(ascending=False, inplace=True)
1429-
self.assert_series_equal(ts, self.ts.sort_values(ascending=False))
1430-
self.assert_index_equal(ts.index,
1431-
self.ts.sort_values(ascending=False).index)
1432-
1433-
# GH 5856/5853
1434-
# Series.sort_values operating on a view
1435-
df = DataFrame(np.random.randn(10, 4))
1436-
s = df.iloc[:, 0]
1437-
1438-
def f():
1439-
s.sort_values(inplace=True)
1440-
1441-
self.assertRaises(ValueError, f)
1442-
1443-
# test order/sort inplace
1444-
# GH6859
1445-
ts1 = self.ts.copy()
1446-
ts1.sort_values(ascending=False, inplace=True)
1447-
ts2 = self.ts.copy()
1448-
ts2.sort_values(ascending=False, inplace=True)
1449-
assert_series_equal(ts1, ts2)
1450-
1451-
ts1 = self.ts.copy()
1452-
ts1 = ts1.sort_values(ascending=False, inplace=False)
1453-
ts2 = self.ts.copy()
1454-
ts2 = ts.sort_values(ascending=False)
1455-
assert_series_equal(ts1, ts2)
1456-
1457-
def test_sort_index(self):
1458-
rindex = list(self.ts.index)
1459-
random.shuffle(rindex)
1460-
1461-
random_order = self.ts.reindex(rindex)
1462-
sorted_series = random_order.sort_index()
1463-
assert_series_equal(sorted_series, self.ts)
1464-
1465-
# descending
1466-
sorted_series = random_order.sort_index(ascending=False)
1467-
assert_series_equal(sorted_series,
1468-
self.ts.reindex(self.ts.index[::-1]))
1469-
1470-
def test_sort_index_inplace(self):
1471-
1472-
# For #11402
1473-
rindex = list(self.ts.index)
1474-
random.shuffle(rindex)
1475-
1476-
# descending
1477-
random_order = self.ts.reindex(rindex)
1478-
result = random_order.sort_index(ascending=False, inplace=True)
1479-
self.assertIs(result, None,
1480-
msg='sort_index() inplace should return None')
1481-
assert_series_equal(random_order, self.ts.reindex(self.ts.index[::-1]))
1482-
1483-
# ascending
1484-
random_order = self.ts.reindex(rindex)
1485-
result = random_order.sort_index(ascending=True, inplace=True)
1486-
self.assertIs(result, None,
1487-
msg='sort_index() inplace should return None')
1488-
assert_series_equal(random_order, self.ts)
1489-
1490-
def test_sort_API(self):
1491-
1492-
# API for 9816
1493-
1494-
# sortlevel
1495-
mi = MultiIndex.from_tuples([[1, 1, 3], [1, 1, 1]], names=list('ABC'))
1496-
s = Series([1, 2], mi)
1497-
backwards = s.iloc[[1, 0]]
1498-
1499-
res = s.sort_index(level='A')
1500-
assert_series_equal(backwards, res)
1501-
1502-
# sort_index
1503-
rindex = list(self.ts.index)
1504-
random.shuffle(rindex)
1505-
1506-
random_order = self.ts.reindex(rindex)
1507-
sorted_series = random_order.sort_index(level=0)
1508-
assert_series_equal(sorted_series, self.ts)
1509-
1510-
# compat on axis
1511-
sorted_series = random_order.sort_index(axis=0)
1512-
assert_series_equal(sorted_series, self.ts)
1513-
1514-
self.assertRaises(ValueError, lambda: random_order.sort_values(axis=1))
1515-
1516-
sorted_series = random_order.sort_index(level=0, axis=0)
1517-
assert_series_equal(sorted_series, self.ts)
1518-
1519-
self.assertRaises(ValueError,
1520-
lambda: random_order.sort_index(level=0, axis=1))
1521-
1522-
def test_order(self):
1523-
1524-
# 9816 deprecated
1525-
with tm.assert_produces_warning(FutureWarning):
1526-
self.ts.order()
1527-
1528-
ts = self.ts.copy()
1529-
ts[:5] = np.NaN
1530-
vals = ts.values
1531-
1532-
result = ts.sort_values()
1533-
self.assertTrue(np.isnan(result[-5:]).all())
1534-
self.assert_numpy_array_equal(result[:-5].values, np.sort(vals[5:]))
1535-
1536-
result = ts.sort_values(na_position='first')
1537-
self.assertTrue(np.isnan(result[:5]).all())
1538-
self.assert_numpy_array_equal(result[5:].values, np.sort(vals[5:]))
1539-
1540-
# something object-type
1541-
ser = Series(['A', 'B'], [1, 2])
1542-
# no failure
1543-
ser.sort_values()
1544-
1545-
# ascending=False
1546-
ordered = ts.sort_values(ascending=False)
1547-
expected = np.sort(ts.valid().values)[::-1]
1548-
assert_almost_equal(expected, ordered.valid().values)
1549-
ordered = ts.sort_values(ascending=False, na_position='first')
1550-
assert_almost_equal(expected, ordered.valid().values)
1551-
15521416
def test_nsmallest_nlargest(self):
15531417
# float, int, datetime64 (use i8), timedelts64 (same),
15541418
# object that are numbers, object that are strings

pandas/tests/series/test_sorting.py

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
# coding=utf-8
2+
3+
import numpy as np
4+
import random
5+
6+
from pandas import (DataFrame, Series, MultiIndex)
7+
8+
from pandas.util.testing import (assert_series_equal, assert_almost_equal)
9+
import pandas.util.testing as tm
10+
11+
from .common import TestData
12+
13+
14+
class TestSeriesSorting(TestData, tm.TestCase):
15+
16+
_multiprocess_can_split_ = True
17+
18+
def test_sort_values(self):
19+
20+
ts = self.ts.copy()
21+
22+
# 9816 deprecated
23+
with tm.assert_produces_warning(FutureWarning):
24+
ts.sort()
25+
26+
self.assert_series_equal(ts, self.ts.sort_values())
27+
self.assert_index_equal(ts.index, self.ts.sort_values().index)
28+
29+
ts.sort_values(ascending=False, inplace=True)
30+
self.assert_series_equal(ts, self.ts.sort_values(ascending=False))
31+
self.assert_index_equal(ts.index,
32+
self.ts.sort_values(ascending=False).index)
33+
34+
# GH 5856/5853
35+
# Series.sort_values operating on a view
36+
df = DataFrame(np.random.randn(10, 4))
37+
s = df.iloc[:, 0]
38+
39+
def f():
40+
s.sort_values(inplace=True)
41+
42+
self.assertRaises(ValueError, f)
43+
44+
# test order/sort inplace
45+
# GH6859
46+
ts1 = self.ts.copy()
47+
ts1.sort_values(ascending=False, inplace=True)
48+
ts2 = self.ts.copy()
49+
ts2.sort_values(ascending=False, inplace=True)
50+
assert_series_equal(ts1, ts2)
51+
52+
ts1 = self.ts.copy()
53+
ts1 = ts1.sort_values(ascending=False, inplace=False)
54+
ts2 = self.ts.copy()
55+
ts2 = ts.sort_values(ascending=False)
56+
assert_series_equal(ts1, ts2)
57+
58+
def test_sort_index(self):
59+
rindex = list(self.ts.index)
60+
random.shuffle(rindex)
61+
62+
random_order = self.ts.reindex(rindex)
63+
sorted_series = random_order.sort_index()
64+
assert_series_equal(sorted_series, self.ts)
65+
66+
# descending
67+
sorted_series = random_order.sort_index(ascending=False)
68+
assert_series_equal(sorted_series,
69+
self.ts.reindex(self.ts.index[::-1]))
70+
71+
def test_sort_index_inplace(self):
72+
73+
# For #11402
74+
rindex = list(self.ts.index)
75+
random.shuffle(rindex)
76+
77+
# descending
78+
random_order = self.ts.reindex(rindex)
79+
result = random_order.sort_index(ascending=False, inplace=True)
80+
self.assertIs(result, None,
81+
msg='sort_index() inplace should return None')
82+
assert_series_equal(random_order, self.ts.reindex(self.ts.index[::-1]))
83+
84+
# ascending
85+
random_order = self.ts.reindex(rindex)
86+
result = random_order.sort_index(ascending=True, inplace=True)
87+
self.assertIs(result, None,
88+
msg='sort_index() inplace should return None')
89+
assert_series_equal(random_order, self.ts)
90+
91+
def test_sort_API(self):
92+
93+
# API for 9816
94+
95+
# sortlevel
96+
mi = MultiIndex.from_tuples([[1, 1, 3], [1, 1, 1]], names=list('ABC'))
97+
s = Series([1, 2], mi)
98+
backwards = s.iloc[[1, 0]]
99+
100+
res = s.sort_index(level='A')
101+
assert_series_equal(backwards, res)
102+
103+
# sort_index
104+
rindex = list(self.ts.index)
105+
random.shuffle(rindex)
106+
107+
random_order = self.ts.reindex(rindex)
108+
sorted_series = random_order.sort_index(level=0)
109+
assert_series_equal(sorted_series, self.ts)
110+
111+
# compat on axis
112+
sorted_series = random_order.sort_index(axis=0)
113+
assert_series_equal(sorted_series, self.ts)
114+
115+
self.assertRaises(ValueError, lambda: random_order.sort_values(axis=1))
116+
117+
sorted_series = random_order.sort_index(level=0, axis=0)
118+
assert_series_equal(sorted_series, self.ts)
119+
120+
self.assertRaises(ValueError,
121+
lambda: random_order.sort_index(level=0, axis=1))
122+
123+
def test_order(self):
124+
125+
# 9816 deprecated
126+
with tm.assert_produces_warning(FutureWarning):
127+
self.ts.order()
128+
129+
ts = self.ts.copy()
130+
ts[:5] = np.NaN
131+
vals = ts.values
132+
133+
result = ts.sort_values()
134+
self.assertTrue(np.isnan(result[-5:]).all())
135+
self.assert_numpy_array_equal(result[:-5].values, np.sort(vals[5:]))
136+
137+
result = ts.sort_values(na_position='first')
138+
self.assertTrue(np.isnan(result[:5]).all())
139+
self.assert_numpy_array_equal(result[5:].values, np.sort(vals[5:]))
140+
141+
# something object-type
142+
ser = Series(['A', 'B'], [1, 2])
143+
# no failure
144+
ser.sort_values()
145+
146+
# ascending=False
147+
ordered = ts.sort_values(ascending=False)
148+
expected = np.sort(ts.valid().values)[::-1]
149+
assert_almost_equal(expected, ordered.valid().values)
150+
ordered = ts.sort_values(ascending=False, na_position='first')
151+
assert_almost_equal(expected, ordered.valid().values)

0 commit comments

Comments
 (0)