@@ -670,13 +670,15 @@ def _from_inferred_categories(
670670 if known_categories :
671671 # Recode from observation order to dtype.categories order.
672672 categories = dtype .categories
673- codes = recode_for_categories (inferred_codes , cats , categories )
673+ codes = recode_for_categories (inferred_codes , cats , categories , copy = False )
674674 elif not cats .is_monotonic_increasing :
675675 # Sort categories and recode for unknown categories.
676676 unsorted = cats .copy ()
677677 categories = cats .sort_values ()
678678
679- codes = recode_for_categories (inferred_codes , unsorted , categories )
679+ codes = recode_for_categories (
680+ inferred_codes , unsorted , categories , copy = False
681+ )
680682 dtype = CategoricalDtype (categories , ordered = False )
681683 else :
682684 dtype = CategoricalDtype (cats , ordered = False )
@@ -945,7 +947,7 @@ def _set_categories(self, categories, fastpath: bool = False) -> None:
945947
946948 super ().__init__ (self ._ndarray , new_dtype )
947949
948- def _set_dtype (self , dtype : CategoricalDtype , copy : bool = True ) -> Self :
950+ def _set_dtype (self , dtype : CategoricalDtype , * , copy : bool ) -> Self :
949951 """
950952 Internal method for directly updating the CategoricalDtype
951953
@@ -959,7 +961,7 @@ def _set_dtype(self, dtype: CategoricalDtype, copy: bool = True) -> Self:
959961 a (valid) instance of `CategoricalDtype`.
960962 """
961963 codes = recode_for_categories (
962- self .codes , self .categories , dtype .categories , copy
964+ self .codes , self .categories , dtype .categories , copy = copy
963965 )
964966 return type (self )._simple_new (codes , dtype = dtype )
965967
@@ -1154,7 +1156,7 @@ def set_categories(
11541156 codes = cat ._codes
11551157 else :
11561158 codes = recode_for_categories (
1157- cat .codes , cat .categories , new_dtype .categories
1159+ cat .codes , cat .categories , new_dtype .categories , copy = False
11581160 )
11591161 NDArrayBacked .__init__ (cat , codes , new_dtype )
11601162 return cat
@@ -3006,7 +3008,7 @@ def _get_codes_for_values(
30063008
30073009
30083010def recode_for_categories (
3009- codes : np .ndarray , old_categories , new_categories , copy : bool = True
3011+ codes : np .ndarray , old_categories , new_categories , * , copy : bool
30103012) -> np .ndarray :
30113013 """
30123014 Convert a set of codes for to a new set of categories
@@ -3027,7 +3029,7 @@ def recode_for_categories(
30273029 >>> old_cat = pd.Index(["b", "a", "c"])
30283030 >>> new_cat = pd.Index(["a", "b"])
30293031 >>> codes = np.array([0, 1, 1, 2])
3030- >>> recode_for_categories(codes, old_cat, new_cat)
3032+ >>> recode_for_categories(codes, old_cat, new_cat, copy=True )
30313033 array([ 1, 0, 0, -1], dtype=int8)
30323034 """
30333035 if len (old_categories ) == 0 :
0 commit comments