Этот код делает то, что я хочу, но кажется... многословным и неэлегантным; как будто мне платят за строку кода. Есть ли более простой способ сделать это?
Код: Выделить всё
import polars as pl
df = pl.DataFrame(
{
"lat": [ 43.6425047, 43.6, 40.688966, 40.6],
"lng": [-79.3861057, -79.3, -74.044438, -74.0],
}
)
df = (df.with_columns(
pl.col("lat").cast(pl.String)
.str.split_exact(".", 1)
.struct.rename_fields(["lat_major", "lat_minor"])
.alias("lat_temp"))
.unnest("lat_temp")
.with_columns(
pl.col("lat_minor")
.str.len_chars()
.alias("lat_precision"))
.drop("lat_major", "lat_minor")
.with_columns(
pl.col("lng").cast(pl.String)
.str.split_exact(".", 1)
.struct.rename_fields(["lng_major", "lng_minor"])
.alias("lng_temp"))
.unnest("lng_temp")
.with_columns(
pl.col("lng_minor")
.str.len_chars()
.alias("lng_precision"))
.drop("lng_major", "lng_minor")
.with_columns(
pl.col("lat_precision")
.add(pl.col("lng_precision"))
.alias("precision"))
.drop("lat_precision", "lng_precision")
)
df.head()
Код: Выделить всё
shape: (4, 3)
┌───────────┬────────────┬───────────┐
│ lat ┆ lng ┆ precision │
│ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ u32 │
╞═══════════╪════════════╪═══════════╡
│ 43.642505 ┆ -79.386106 ┆ 14 │
│ 43.6 ┆ -79.3 ┆ 2 │
│ 40.688966 ┆ -74.044438 ┆ 12 │
│ 40.6 ┆ -74.0 ┆ 2 │
└───────────┴────────────┴───────────┘
Подробнее здесь: https://stackoverflow.com/questions/795 ... ars-floats
Мобильная версия