@@ -134,22 +134,27 @@ def test_rank_categorical(self):
134
134
assert_series_equal (ordered .rank (), exp )
135
135
assert_series_equal (ordered .rank (ascending = False ), exp_desc )
136
136
137
- # Unordered categoricals should be ranked as objects
137
+ # See #19560
138
+ error_msg = ("pandas.core.algorithms.rank "
139
+ "not supported for unordered "
140
+ "non-numeric data" )
141
+
142
+ # Ranking unordered categorials depreciated per #19560
138
143
unordered = Series (['first' , 'second' , 'third' , 'fourth' ,
139
144
'fifth' , 'sixth' ]).astype (
140
145
CategoricalDtype (categories = ['first' , 'second' , 'third' ,
141
146
'fourth' , 'fifth' , 'sixth' ],
142
147
ordered = False ))
143
- exp_unordered = Series ([ 2. , 4. , 6. , 3. , 1. , 5. ])
144
- res = unordered . rank ()
145
- assert_series_equal ( res , exp_unordered )
148
+
149
+ with tm . assert_raises_regex ( ValueError , error_msg ):
150
+ unordered . rank ( )
146
151
147
152
unordered1 = Series (
148
153
[1 , 2 , 3 , 4 , 5 , 6 ],
149
154
).astype (CategoricalDtype ([1 , 2 , 3 , 4 , 5 , 6 ], False ))
150
- exp_unordered1 = Series ([ 1. , 2. , 3. , 4. , 5. , 6. ])
151
- res1 = unordered1 . rank ()
152
- assert_series_equal ( res1 , exp_unordered1 )
155
+
156
+ # Won't raise ValueError because entries not objects.
157
+ unordered1 . rank ( )
153
158
154
159
# Test na_option for rank data
155
160
na_ser = Series (
@@ -213,16 +218,13 @@ def test_rank_signature(self):
213
218
'int64' ,
214
219
marks = pytest .mark .xfail (
215
220
reason = "iNaT is equivalent to minimum value of dtype"
216
- "int64 pending issue #16674" )),
217
- ([NegInfinity (), '1' , 'A' , 'BA' , 'Ba' , 'C' , Infinity ()],
218
- 'object' )
221
+ "int64 pending issue #16674" ))
219
222
])
220
223
def test_rank_inf (self , contents , dtype ):
221
224
dtype_na_map = {
222
225
'float64' : np .nan ,
223
226
'float32' : np .nan ,
224
- 'int64' : iNaT ,
225
- 'object' : None
227
+ 'int64' : iNaT
226
228
}
227
229
# Insert nans at random positions if underlying dtype has missing
228
230
# value. Then adjust the expected order by adding nans accordingly
@@ -249,13 +251,10 @@ def _check(s, expected, method='average'):
249
251
result = s .rank (method = method )
250
252
tm .assert_series_equal (result , Series (expected ))
251
253
252
- dtypes = [None , object ]
253
- disabled = set ([(object , 'first' )])
254
+ dtypes = [None ]
254
255
results = self .results
255
256
256
257
for method , dtype in product (results , dtypes ):
257
- if (dtype , method ) in disabled :
258
- continue
259
258
series = s if dtype is None else s .astype (dtype )
260
259
_check (series , results [method ], method = method )
261
260
@@ -294,7 +293,7 @@ def _check(s, method, na_option, ascending):
294
293
for dtype , na_value , pos_inf , neg_inf in dtypes :
295
294
in_arr = [neg_inf ] * chunk + [na_value ] * chunk + [pos_inf ] * chunk
296
295
iseries = Series (in_arr , dtype = dtype )
297
- if ( dtype , method ) in disabled :
296
+ if dtype == 'object' :
298
297
continue
299
298
_check (iseries , method , na_option , ascending )
300
299
@@ -330,7 +329,7 @@ def test_rank_methods_series(self):
330
329
tm .assert_series_equal (result , expected )
331
330
332
331
def test_rank_dense_method (self ):
333
- dtypes = ['O' , ' f8' , 'i8' ]
332
+ dtypes = ['f8' , 'i8' ]
334
333
in_out = [([1 ], [1 ]),
335
334
([2 ], [1 ]),
336
335
([0 ], [1 ]),
@@ -348,7 +347,7 @@ def test_rank_dense_method(self):
348
347
assert_series_equal (result , expected )
349
348
350
349
def test_rank_descending (self ):
351
- dtypes = ['O' , ' f8' , 'i8' ]
350
+ dtypes = ['f8' , 'i8' ]
352
351
353
352
for dtype , method in product (dtypes , self .results ):
354
353
if 'i' in dtype :
@@ -360,9 +359,6 @@ def test_rank_descending(self):
360
359
expected = (s .max () - s ).rank ()
361
360
assert_series_equal (res , expected )
362
361
363
- if method == 'first' and dtype == 'O' :
364
- continue
365
-
366
362
expected = (s .max () - s ).rank (method = method )
367
363
res2 = s .rank (method = method , ascending = False )
368
364
assert_series_equal (res2 , expected )
@@ -379,9 +375,15 @@ def test_rank_int(self):
379
375
def test_rank_object_bug (self ):
380
376
# GH 13445
381
377
382
- # smoke tests
383
- Series ([np .nan ] * 32 ).astype (object ).rank (ascending = True )
384
- Series ([np .nan ] * 32 ).astype (object ).rank (ascending = False )
378
+ # See #19560
379
+ error_msg = ("pandas.core.algorithms.rank "
380
+ "not supported for unordered "
381
+ "non-numeric data" )
382
+
383
+ with tm .assert_raises_regex (ValueError , error_msg ):
384
+ Series ([np .nan ] * 32 ).astype (object ).rank (ascending = True )
385
+ with tm .assert_raises_regex (ValueError , error_msg ):
386
+ Series ([np .nan ] * 32 ).astype (object ).rank (ascending = False )
385
387
386
388
def test_rank_modify_inplace (self ):
387
389
# GH 18521
@@ -396,7 +398,7 @@ def test_rank_modify_inplace(self):
396
398
397
399
# GH15630, pct should be on 100% basis when method='dense'
398
400
399
- @pytest .mark .parametrize ('dtype' , ['O' , ' f8' , 'i8' ])
401
+ @pytest .mark .parametrize ('dtype' , ['f8' , 'i8' ])
400
402
@pytest .mark .parametrize ('ser, exp' , [
401
403
([1 ], [1. ]),
402
404
([1 , 2 ], [1. / 2 , 2. / 2 ]),
@@ -414,7 +416,7 @@ def test_rank_dense_pct(dtype, ser, exp):
414
416
assert_series_equal (result , expected )
415
417
416
418
417
- @pytest .mark .parametrize ('dtype' , ['O' , ' f8' , 'i8' ])
419
+ @pytest .mark .parametrize ('dtype' , ['f8' , 'i8' ])
418
420
@pytest .mark .parametrize ('ser, exp' , [
419
421
([1 ], [1. ]),
420
422
([1 , 2 ], [1. / 2 , 2. / 2 ]),
@@ -432,7 +434,7 @@ def test_rank_min_pct(dtype, ser, exp):
432
434
assert_series_equal (result , expected )
433
435
434
436
435
- @pytest .mark .parametrize ('dtype' , ['O' , ' f8' , 'i8' ])
437
+ @pytest .mark .parametrize ('dtype' , ['f8' , 'i8' ])
436
438
@pytest .mark .parametrize ('ser, exp' , [
437
439
([1 ], [1. ]),
438
440
([1 , 2 ], [1. / 2 , 2. / 2 ]),
@@ -450,7 +452,7 @@ def test_rank_max_pct(dtype, ser, exp):
450
452
assert_series_equal (result , expected )
451
453
452
454
453
- @pytest .mark .parametrize ('dtype' , ['O' , ' f8' , 'i8' ])
455
+ @pytest .mark .parametrize ('dtype' , ['f8' , 'i8' ])
454
456
@pytest .mark .parametrize ('ser, exp' , [
455
457
([1 ], [1. ]),
456
458
([1 , 2 ], [1. / 2 , 2. / 2 ]),
0 commit comments