@@ -1274,23 +1274,25 @@ cdef class TextReader:
1274
1274
na_hashset, self .c_encoding)
1275
1275
# sort categories and recode if necessary
1276
1276
cats = Index(cats)
1277
- if not cats.is_monotonic_increasing:
1277
+ if (isinstance (dtype, CategoricalDtype) and
1278
+ dtype.categories is not None ):
1279
+ # redcode for dtype.categories
1280
+ categories = dtype.categories
1281
+ indexer = cats.get_indexer(categories)
1282
+ codes = take_1d(codes, categories, fill_value = - 1 )
1283
+ elif not cats.is_monotonic_increasing:
1278
1284
unsorted = cats.copy()
1279
1285
cats = cats.sort_values()
1280
1286
indexer = cats.get_indexer(unsorted)
1281
1287
codes = take_1d(indexer, codes, fill_value = - 1 )
1288
+ else :
1289
+ categories = cats
1282
1290
1283
- cat = Categorical(codes, categories = cats , ordered = False ,
1291
+ cat = Categorical(codes, categories = categories , ordered = False ,
1284
1292
fastpath = True )
1285
1293
1286
- if isinstance (dtype, CategoricalDtype):
1287
- if dtype.categories is None :
1288
- # skip recoding
1289
- if dtype.ordered:
1290
- cat = cat.set_ordered(ordered = dtype.ordered)
1291
- else :
1292
- cat = cat.set_categories(dtype.categories,
1293
- ordered = dtype.ordered)
1294
+ if isinstance (dtype, CategoricalDtype) and dtype.ordered:
1295
+ cat = cat.set_ordered(ordered = True )
1294
1296
return cat, na_count
1295
1297
elif is_object_dtype(dtype):
1296
1298
return self ._string_convert(i, start, end, na_filter,
0 commit comments