Поляры получают ошибку StringCacheMismatchError даже после использования диспетчера контекста строкового кэшаPython

Программы на Python
Anonymous
 Поляры получают ошибку StringCacheMismatchError даже после использования диспетчера контекста строкового кэша

Сообщение Anonymous »

Использование поляров повсюду
Я хочу использовать replace, чтобы что-то вроде кодирования меток моих категориальных столбцов. Проблема в том, что мой фрейм данных создан путем объединения других фреймов данных.
Я могу сделать следующее:

Код: Выделить всё

df1 = pl.DataFrame(
{'a':[1,2],
'b':['a','b']},
schema = {'a':pl.Float32, 'b': pl.Categorical})
cats = df1['b'].cat.get_categories().to_list()
df1 = df1.with_columns(
pl.col('b').replace(cats, range(len(cats)), return_dtype = pl.Int32)
)
print(df1)

output:
shape: (2, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ f32 ┆ i32 │
╞═════╪═════╡
│ 1.0 ┆ 0   │
│ 2.0 ┆ 1   │
Но следующее не удается:

Код: Выделить всё

with pl.StringCache():
df1 = pl.DataFrame(
{'a':[1,2],
'b':['a','b']},
schema = {'a':pl.Float32, 'b': pl.Categorical})
df2 = pl.DataFrame(
{'c':[3,4], 'b':['a','c']},
schema = {'c': pl.Int32, 'b': pl.Categorical})
df = pl.concat([df1, df2], how = 'diagonal')
print(df)
output:
shape: (4, 3)
┌──────┬─────┬──────┐
│ a    ┆ b   ┆ c    │
│ ---  ┆ --- ┆ ---  │
│ f32  ┆ cat ┆ i32  │
╞══════╪═════╪══════╡
│ 1.0  ┆ a   ┆ null │
│ 2.0  ┆ b   ┆ null │
│ null ┆ a   ┆ 3    │
│ null ┆ c   ┆ 4    │
└──────┴─────┴──────┘

Код: Выделить всё

cats = df['b'].cat.get_categories().to_list()
df = df.with_columns(
pl.col('b')
.replace(cats, range(len(cats)), return_dtype = pl.Int32))
print(df)

output:
StringCacheMismatchError: cannot compare categoricals coming from different sources,
consider setting a global StringCache.

Как заменить категории целым числом с помощью replace, если мой фрейм данных сформирован путем объединения нескольких других фреймов данных?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -context-m

Вернуться в «Python»