@@ -1548,50 +1548,47 @@ def test_memory_usage(self):
1548
1548
1549
1549
def test_searchsorted (self ):
1550
1550
# https://github.com/pandas-dev/pandas/issues/8420
1551
- s1 = pd .Series (['apple' , 'bread' , 'bread' , 'cheese' , 'milk' ])
1552
- s2 = pd .Series (['apple' , 'bread' , 'bread' , 'cheese' , 'milk' , 'donuts' ])
1553
- c1 = pd .Categorical (s1 , ordered = True )
1554
- c2 = pd .Categorical (s2 , ordered = True )
1555
-
1556
- # Single item array
1557
- res = c1 .searchsorted (['bread' ])
1558
- chk = s1 .searchsorted (['bread' ])
1559
- exp = np .array ([1 ], dtype = np .intp )
1560
- self .assert_numpy_array_equal (res , exp )
1561
- self .assert_numpy_array_equal (res , chk )
1562
-
1563
- # Scalar version of single item array
1564
- # Categorical return np.array like pd.Series, but different from
1565
- # np.array.searchsorted()
1566
- res = c1 .searchsorted ('bread' )
1567
- chk = s1 .searchsorted ('bread' )
1568
- exp = np .array ([1 ], dtype = np .intp )
1551
+ # https://github.com/pandas-dev/pandas/issues/14522
1552
+
1553
+ c1 = pd .Categorical (['cheese' , 'apple' , 'bread' , 'bread' , 'milk' ],
1554
+ categories = ['cheese' , 'milk' , 'apple' , 'bread' ],
1555
+ ordered = True ).sort_values ()
1556
+ c2 = pd .Categorical (['cheese' , 'apple' , 'bread' , 'bread' , 'milk' ],
1557
+ categories = ['cheese' , 'milk' , 'apple' , 'bread' ],
1558
+ ordered = False ).sort_values ()
1559
+
1560
+ # Searching for single item argument, side='left' (default)
1561
+ res = c1 .searchsorted ('apple' )
1562
+ exp = np .array ([2 ], dtype = np .intp )
1569
1563
self .assert_numpy_array_equal (res , exp )
1570
- self .assert_numpy_array_equal (res , chk )
1571
1564
1572
- # Searching for a value that is not present in the Categorical
1573
- res = c1 .searchsorted (['bread' , 'eggs' ])
1574
- chk = s1 .searchsorted (['bread' , 'eggs' ])
1575
- exp = np .array ([1 , 4 ], dtype = np .intp )
1565
+ # Searching for single item array, side='left' (default)
1566
+ res = c1 .searchsorted (['bread' ])
1567
+ exp = np .array ([3 ], dtype = np .intp )
1576
1568
self .assert_numpy_array_equal (res , exp )
1577
- self .assert_numpy_array_equal (res , chk )
1578
1569
1579
- # Searching for a value that is not present, to the right
1580
- res = c1 .searchsorted (['bread' , 'eggs' ], side = 'right' )
1581
- chk = s1 .searchsorted (['bread' , 'eggs' ], side = 'right' )
1582
- exp = np .array ([3 , 4 ], dtype = np .intp ) # eggs before milk
1583
- self .assert_numpy_array_equal (res , exp )
1584
- self .assert_numpy_array_equal (res , chk )
1585
-
1586
- # As above, but with a sorter array to reorder an unsorted array
1587
- res = c2 .searchsorted (['bread' , 'eggs' ], side = 'right' ,
1588
- sorter = [0 , 1 , 2 , 3 , 5 , 4 ])
1589
- chk = s2 .searchsorted (['bread' , 'eggs' ], side = 'right' ,
1590
- sorter = [0 , 1 , 2 , 3 , 5 , 4 ])
1591
- # eggs after donuts, after switching milk and donuts
1570
+ # Searching for several items array, side='right'
1571
+ res = c1 .searchsorted (['apple' , 'bread' ], side = 'right' )
1592
1572
exp = np .array ([3 , 5 ], dtype = np .intp )
1593
1573
self .assert_numpy_array_equal (res , exp )
1594
- self .assert_numpy_array_equal (res , chk )
1574
+
1575
+ # Searching for a single value that is not from the Categorical
1576
+ def f ():
1577
+ c1 .searchsorted ('cucumber' )
1578
+
1579
+ self .assertRaises (ValueError , f )
1580
+
1581
+ # Searching for multiple values one of each is not from the Categorical
1582
+ def f ():
1583
+ c1 .searchsorted (['bread' , 'cucumber' ])
1584
+
1585
+ self .assertRaises (ValueError , f )
1586
+
1587
+ # searchsorted call for not ordered Categorical
1588
+ def f ():
1589
+ c2 .searchsorted ('apple' )
1590
+
1591
+ self .assertRaises (ValueError , f )
1595
1592
1596
1593
def test_deprecated_labels (self ):
1597
1594
# TODO: labels is deprecated and should be removed in 0.18 or 2017,
0 commit comments