@@ -245,11 +245,23 @@ def _from_categorical_dtype(cls, dtype, categories=None, ordered=None):
245
245
def _from_values_or_dtype (cls , values = None , categories = None , ordered = None ,
246
246
dtype = None ):
247
247
"""
248
- Construct from the inputs used in :class:`Categorical` construction.
249
-
250
- This is an internal helper method, and specifically does not do the
251
- factorization step, if that is needed. Additional steps may
252
- therefore have to be taken to create the final dtype.
248
+ Construct dtype from the input parameters used in :class:`Categorical`.
249
+
250
+ This constructor method specifically does not do the factorization
251
+ step, if that is needed to find the categories. This constructor may
252
+ therefore return ``CategoricalDtype(categories=None, ordered=None)``,
253
+ which may not be useful. Additional steps may therefore have to be
254
+ taken to create the final dtype.
255
+
256
+ The return dtype is specified from the inputs in this prioritized
257
+ order:
258
+ 1. if dtype is a CategoricalDtype, return dtype
259
+ 2. if dtype is the string 'category', create a CategoricalDtype from
260
+ the supplied categories and ordered parameters, and return that.
261
+ 3. if values is a categorical, use value.dtype, but override it with
262
+ categories and ordered if either/both of those are not None.
263
+ 4. if dtype is None and values is not a categorical, construct the
264
+ dtype from categories and ordered, even if either of those is None.
253
265
254
266
Parameters
255
267
----------
@@ -307,7 +319,8 @@ def _from_values_or_dtype(cls, values=None, categories=None, ordered=None,
307
319
categories , ordered )
308
320
else :
309
321
# If dtype=None and values is not categorical, create a new dtype.
310
- # Note: This could potentially have categories=None and ordered=None.
322
+ # Note: This could potentially have categories=None and
323
+ # ordered=None.
311
324
dtype = CategoricalDtype (categories , ordered )
312
325
313
326
return dtype
0 commit comments