73
73
ABCExtensionArray ,
74
74
ABCIndex ,
75
75
ABCMultiIndex ,
76
- ABCRangeIndex ,
77
76
ABCSeries ,
78
77
ABCTimedeltaArray ,
79
78
)
@@ -738,13 +737,11 @@ def factorize(
738
737
# Step 2 is dispatched to extension types (like Categorical). They are
739
738
# responsible only for factorization. All data coercion, sorting and boxing
740
739
# should happen here.
741
- if isinstance (values , ABCRangeIndex ):
742
- return values .factorize (sort = sort )
740
+ if isinstance (values , ( ABCIndex , ABCSeries ) ):
741
+ return values .factorize (sort = sort , use_na_sentinel = use_na_sentinel )
743
742
744
743
values = _ensure_arraylike (values )
745
744
original = values
746
- if not isinstance (values , ABCMultiIndex ):
747
- values = extract_array (values , extract_numpy = True )
748
745
749
746
if (
750
747
isinstance (values , (ABCDatetimeArray , ABCTimedeltaArray ))
@@ -753,7 +750,7 @@ def factorize(
753
750
# The presence of 'freq' means we can fast-path sorting and know there
754
751
# aren't NAs
755
752
codes , uniques = values .factorize (sort = sort )
756
- return _re_wrap_factorize ( original , uniques , codes )
753
+ return codes , uniques
757
754
758
755
elif not isinstance (values .dtype , np .dtype ):
759
756
codes , uniques = values .factorize (use_na_sentinel = use_na_sentinel )
@@ -789,21 +786,6 @@ def factorize(
789
786
790
787
uniques = _reconstruct_data (uniques , original .dtype , original )
791
788
792
- return _re_wrap_factorize (original , uniques , codes )
793
-
794
-
795
- def _re_wrap_factorize (original , uniques , codes : np .ndarray ):
796
- """
797
- Wrap factorize results in Series or Index depending on original type.
798
- """
799
- if isinstance (original , ABCIndex ):
800
- uniques = ensure_wrapped_if_datetimelike (uniques )
801
- uniques = original ._shallow_copy (uniques , name = None )
802
- elif isinstance (original , ABCSeries ):
803
- from pandas import Index
804
-
805
- uniques = Index (uniques )
806
-
807
789
return codes , uniques
808
790
809
791
0 commit comments