dask .__ version__ = 2.5.0
У меня есть таблица со столбцами, содержащая множество значений uint16 в диапазоне 0, ..., n и несколько таблиц подстановки, содержащих сопоставления этих «кодов» с их « категории.
Мой вопрос: есть ли способ сделать эти целочисленные столбцы «категориальными», не анализируя данные или не заменяя сначала коды категориями.
В идеале я хочу, чтобы Dask мог сохранять значения как есть, принимать их как коды категорий и принимать категории, которые, как я сказал, Dask принадлежат этим кодам?
dfp = pd.DataFrame({'c01': np.random.choice(np.arange(3),size=10), 'v02': np.random.randn(10)})
dfd = dd.from_pandas(dfp, npartitions=2)
mdt = pd.CategoricalDtype(list('abc'), ordered=True)
dfd.c01 = dfd.c01.map_partitions(lambda s: pd.Categorical.from_codes(s, dtype=mdt), meta='category')
dfd.dtypes
Выше не работает, dtype это 'O' (кажется, он заменил целые строки на строки)? Впоследствии я могу сделать следующее (что, кажется, делает трюк):
dfd.c01 = dfd.c01.astype('category')
Но чем это кажется неэффективным для больших наборов данных.
Любые указатели приветствуются.
Некоторый контекст: у меня большой набор данных (> 500 миллионов строк) со многими столбцами, содержащими ограниченное количество строк. Идеальный вариант использования для категории dtype. Данные извлекаются из Teradata DW с помощью Parallel Transporter, что означает, что он создает файл UTF-8 с разделителями. Чтобы ускорить этот процесс, я классифицирую данные на стороне Teradata, и мне просто нужно создать категорию dtype из кодов на стороне dask забора.