@@ -293,13 +293,10 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
293
293
294
294
# sanitize input
295
295
if is_categorical_dtype (values ):
296
- values = values .get_values ()
297
-
298
- elif isinstance (values , (ABCIndexClass , ABCSeries )):
299
- # we'll do inference later
300
- pass
296
+ if dtype .categories is None :
297
+ dtype = CategoricalDtype (values .categories , dtype .ordered )
301
298
302
- else :
299
+ elif not isinstance ( values , ( ABCIndexClass , ABCSeries )) :
303
300
if not isinstance (values , np .ndarray ):
304
301
values = _convert_to_list_like (values )
305
302
from pandas .core .series import _sanitize_array
@@ -330,9 +327,14 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
330
327
raise NotImplementedError ("> 1 ndim Categorical are not "
331
328
"supported at this time" )
332
329
333
- if dtype .categories is None :
334
- # we're inferring from values
335
- dtype = CategoricalDtype (categories , dtype .ordered )
330
+ # we're inferring from values
331
+ dtype = CategoricalDtype (categories , dtype .ordered )
332
+
333
+ elif is_categorical_dtype (values ):
334
+ old_codes = (values .cat .codes if isinstance (values , ABCSeries )
335
+ else values .codes )
336
+ codes = _recode_for_categories (old_codes , values .dtype .categories ,
337
+ dtype .categories )
336
338
337
339
else :
338
340
codes = _get_codes_for_values (values , dtype .categories )
0 commit comments