Code: Select all
import polars as pl
data = [
{"name_full": "McCartney, Paul"},
{"name_last": "Lennon", "name_first": "John"},
{"name_full": "Starr, Ringo"},
{"name_last": "Harrison", "name_first": "George"}
]
df = pl.DataFrame(data)
df
Code: Select all
shape: (4, 3)
┌─────────────────┬───────────┬────────────┐
│ name_full ┆ name_last ┆ name_first │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═════════════════╪═══════════╪════════════╡
│ McCartney, Paul ┆ null ┆ null │
│ null ┆ Lennon ┆ John │
│ Starr, Ringo ┆ null ┆ null │
│ null ┆ Harrison ┆ George │
└─────────────────┴───────────┴────────────┘
Ich kann die gewünschten Ergebnisse mit Folgendem erzielen, aber es ist schwierig, dies für komplexere Daten zu skalieren, da für jede Spalte, in der Daten landen müssen, ein separates pl.when erforderlich ist.
Code: Select all
(
df.with_columns(
pl.col("name_full").str.split(",").list.eval(pl.element().str.strip_chars()).alias("name_parts")
).with_columns(
pl.when(pl.col("name_last").is_null())
.then(pl.col("name_parts").list.get(0, null_on_oob=True))
.otherwise(pl.col("name_last")).alias("name_last"),
pl.when(pl.col("name_first").is_null())
.then(pl.col("name_parts").list.get(1, null_on_oob=True))
.otherwise(pl.col("name_first")).alias("name_first")
).select(pl.all().exclude("name_full", "name_parts"))
)
Code: Select all
shape: (4, 2)
┌───────────┬────────────┐
│ name_last ┆ name_first │
│ --- ┆ --- │
│ str ┆ str │
╞═══════════╪════════════╡
│ McCartney ┆ Paul │
│ Lennon ┆ John │
│ Starr ┆ Ringo │
│ Harrison ┆ George │
└───────────┴────────────┘
Mobile version