Skip to content

Commit 47186d5

Browse files
committed
add try except for lexsort on object array
1 parent 551f4af commit 47186d5

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

pandas/_libs/algos_rank_helper.pxi.in

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,21 @@ def rank_1d_{{dtype}}(object in_arr, ties_method='average', ascending=True,
104104
try:
105105
# lexsort on object array will raise TypeError for numpy version
106106
# earlier than 1.11.0
107-
_dt = [('values', 'object'), ('mask', 'bool')]
108-
_values = np.asarray(list(zip(mask, values)), dtype=_dt)
109-
if ascending ^ (na_option == 'top'):
110-
_values = np.asarray(list(zip(values, mask)), dtype=_dt)
111-
else:
112-
_values = np.asarray(list(zip(values, (~mask))), dtype=_dt)
113-
_as = np.argsort(_values, kind='mergesort', order=('mask', 'values'))
107+
_as = np.lexsort(keys=(mask, values))
114108
except TypeError:
115-
if not retry:
116-
raise
117-
118-
valid_locs = (~mask).nonzero()[0]
119-
ranks.put(valid_locs, rank_1d_object(values.take(valid_locs), 0,
120-
ties_method=ties_method,
121-
ascending=ascending))
122-
np.putmask(ranks, mask, np.nan)
123-
return ranks
109+
try:
110+
_dt = [('values', 'O'), ('mask', '?')]
111+
_values = np.asarray(list(zip(values, mask)), dtype=_dt)
112+
_as = np.argsort(_values, kind='mergesort', order=('values', 'mask'))
113+
except TypeError:
114+
if not retry:
115+
raise
116+
valid_locs = (~mask).nonzero()[0]
117+
ranks.put(valid_locs, rank_1d_object(values.take(valid_locs), 0,
118+
ties_method=ties_method,
119+
ascending=ascending))
120+
np.putmask(ranks, mask, np.nan)
121+
return ranks
124122
{{else}}
125123
if tiebreak == TIEBREAK_FIRST:
126124
# need to use a stable sort here

0 commit comments

Comments
 (0)