Эффективное применение нескольких операций к фрейму данных Polars с использованием пользовательской функцииPython

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

Сообщение Anonymous »

Я работаю с DataFrame Polars и пытаюсь очистить столбец, применяя несколько строковых операций. Первая операция, которую мне нужно выполнить, — это str.replace(), чтобы исправить некоторые несоответствия в строке, а затем я хочу извлечь несколько значений в новые столбцы.
Мой текущий подход:

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

df = pl.DataFrame(
{
"engine": ["172.0HP 1.6L 4 Cylinder Engine Gasoline Fuel",
"3.0 Liter Twin Turbo",
"429.0HP 5.0L 8 Cylinder Engine Gasoline Fuel"],
}
)

(
df
.with_columns(
pl.col("engine").str.replace(r'\sLiter', "L")
)
.with_columns(
pl.col("engine").str.extract(r'(\d+)\.\d+HP',1).alias("HP"),
pl.col("engine").str.extract(r'(\d+\.\d+)L',1).alias("Displacement"),
pl.col("engine").str.extract(r'(\d+)\sCylinder',1).alias("Cylinder"),
)
)
Поскольку я собираюсь применить несколько операций к основному фрейму данных, я хочу создать функцию, которая сделает этот код более пригодным для повторного использования и более чистым. Я придумал такой подход, основанный на функциях:
Подход с функцией:

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

def get_engine(engine_col: pl.Expr) -> pl.Expr:
return (
pl.col("engine").str.extract(r'(\d+)\.\d+HP',1).alias("HP"),
pl.col("engine").str.extract(r'(\d+\.\d+)L',1).alias("Displacement"),
pl.col("engine").str.extract(r'(\d+)\sCylinder',1).alias("Cylinder"),
pl.col("engine").str.contains("Electric").alias("Electric")
)

(
df
.with_columns(
pl.col("engine").str.replace(r'\sLiter', "L")
)
.with_columns(
get_engine(engine_col=pl.col("engine"))
)
)
Есть ли лучший или более эффективный способ объединить эти операции, сохраняя при этом чистоту кода?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -custom-fu

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