Перезапись информации в нескольких столбцах PolarsPython

Программы на Python
Ответить
Anonymous
 Перезапись информации в нескольких столбцах Polars

Сообщение Anonymous »

У меня есть фрейм данных со многими столбцами, содержащими inf. Я хотел бы заменить их на null. Все имена столбцов, о которых идет речь, начинаются со строки «ratio_».
Я пробовал это, но получаю новые столбцы с заголовком «литерал», когда хочу заменить старые:
import polars as pl
import numpy as np
df = pl.DataFrame({"label":["a", "b", "c"], "ratio_a":[1.,2.,np.inf]})

df.with_columns(
pl.when(pl.col("^ratio_\w+$").is_infinite())
.then(None)
.otherwise(pl.col("^ratio_\w+$")
)
)

shape: (3, 3)
┌───────┬─────────┬─────────┐
│ label ┆ ratio_a ┆ literal │
│ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ f64 │
╞═══════╪═════════╪═════════╡
│ a ┆ 1.0 ┆ 1.0 │
│ b ┆ 2.0 ┆ 2.0 │
│ c ┆ inf ┆ null │
└───────┴─────────┴─────────┘

Я мог бы решить эту проблему, перебирая имена столбцов в цикле, но был удивлен приведенным выше поведением. Есть ли способ заставить приведенное выше выражение работать?
import numpy as np
df = pl.DataFrame({"label":["a", "b", "c"], "ratio_a":[1.,2.,np.inf]})

for col in df.columns:
if col.startswith("ratio_"):
df = df.with_columns(
pl.when(pl.col(col).is_infinite())
.then(None)
.otherwise(pl.col(col)
).alias(col)
)
df


Подробнее здесь: https://stackoverflow.com/questions/729 ... rs-columns
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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