Мой текущий подход:
Код: Выделить всё
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