Я хочу использовать 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.
Подробнее здесь: https://stackoverflow.com/questions/783 ... -context-m