Вопрос или проблема
Я работаю с версией Polars 0.19.15. В документации для версии 0.19 есть пример для replace()
. Тем не менее, он вызывает ошибку AttributeError:
import polars as pl
pl.__version__
# '0.19.15'
# Пример из документации 0.10:
df = pl.DataFrame({"a": [1, 2, 2, 3]})
df.with_columns(pl.col("a").replace({2: 100}).alias("replaced"))
# AttributeError: 'Expr' object has no attribute 'replace'
В связанной теме один из ответов предлагает использовать replace()
вместо map_dict()
.
Что я делаю не так?
Ответ или решение
Вам вызвало затруднение использование метода replace()
для объекта типа Expr
в библиотеки Polars версии 0.19.15 из-за появления ошибки AttributeError
. Давайте разберемся, в чем проблема и как ее решить.
Как вы заметили, метод replace()
был доступен в более ранних версиях Polars, но начиная с версии 0.11, был произведен ряд изменений в API, что повлияло на его использование. В версии 0.19.15 метода replace()
больше нет в классе Expr
. Вместо этого следует использовать метод map_dict()
, который обеспечивает схожую функциональность.
Вот корректный пример кода, который выполняет замену значений в столбце DataFrame с использованием метода map_dict()
:
import polars as pl
# Создаем DataFrame
df = pl.DataFrame({"a": [1, 2, 2, 3]})
# Используем метод map_dict для замены значений
result = df.with_columns(
pl.col("a").map_dict({2: 100}).alias("replaced")
)
print(result)
В этом примере мы создаем DataFrame с одним столбцом a
, где заменяем все вхождения значения 2
на 100
, используя map_dict()
. Результат будет следующим:
shape: (4, 2)
┌─────┬──────────┐
│ a ┆ replaced │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪══════════╡
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
├─────┼──────────┤
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
│ --- ┆ --- │
└─────┴──────────┘
Таким образом, правильный способ выполнения замены значений в вашем случае — это использование метода map_dict()
. Не забывайте проверять документацию для актуальных версий библиотеки, чтобы быть в курсе последних изменений.