1
1
""" miscellaneous sorting / groupby utilities """
2
- import warnings
3
-
4
2
import numpy as np
5
3
6
4
from pandas ._libs import algos , hashtable , lib
@@ -238,13 +236,15 @@ def nargsort(items, kind='quicksort', ascending=True, na_position='last'):
238
236
handles NaNs. It adds ascending and na_position parameters.
239
237
GH #6399, #5231
240
238
"""
239
+ from pandas .core .internals .arrays import extract_array
241
240
241
+ items = extract_array (items )
242
+ mask = np .asarray (isna (items ))
242
243
# specially handle Categorical
243
244
if is_categorical_dtype (items ):
244
245
if na_position not in {'first' , 'last' }:
245
246
raise ValueError ('invalid na_position: {!r}' .format (na_position ))
246
247
247
- mask = isna (items )
248
248
cnt_null = mask .sum ()
249
249
sorted_idx = items .argsort (ascending = ascending , kind = kind )
250
250
if ascending and na_position == 'last' :
@@ -255,15 +255,12 @@ def nargsort(items, kind='quicksort', ascending=True, na_position='last'):
255
255
sorted_idx = np .roll (sorted_idx , cnt_null )
256
256
return sorted_idx
257
257
258
- with warnings .catch_warnings ():
259
- # https://github.com/pandas-dev/pandas/issues/25439
260
- # can be removed once ExtensionArrays are properly handled by nargsort
261
- warnings .filterwarnings (
262
- "ignore" , category = FutureWarning ,
263
- message = "Converting timezone-aware DatetimeArray to" )
258
+ if is_extension_array_dtype (items ):
259
+ items = items ._values_for_argsort ()
260
+ else :
264
261
items = np .asanyarray (items )
262
+
265
263
idx = np .arange (len (items ))
266
- mask = isna (items )
267
264
non_nans = items [~ mask ]
268
265
non_nan_idx = idx [~ mask ]
269
266
nan_idx = np .nonzero (mask )[0 ]
0 commit comments