Hinzufügen einer Objektspalte zu einem polaren DataFrame mit BroadcastingPython

Python-Programme
Anonymous
 Hinzufügen einer Objektspalte zu einem polaren DataFrame mit Broadcasting

Post by Anonymous »

Wenn ich einen DataFrame habe, kann ich eine Spalte mit einem einzelnen Wert wie folgt erstellen:

Code: Select all

df = pl.DataFrame([[1, 2, 3]])
df.with_columns(pl.lit("ok").alias("metadata"))

Code: Select all

shape: (3, 2)
┌──────────┬──────────┐
│ column_0 ┆ metadata │
│ ---      ┆ ---      │
│ i64      ┆ str      │
╞══════════╪══════════╡
│ 1        ┆ ok       │
│ 2        ┆ ok       │
│ 3        ┆ ok       │
└──────────┴──────────┘
aber mit pl.Object-Spalten funktioniert es nicht:

Code: Select all

df = pl.DataFrame([[1, 2, 3]])
df.with_columns(pl.lit("ok", dtype=pl.Object).alias("metadata"))
# InvalidOperationError: casting from Utf8View to FixedSizeBinary(8) not supported
die Verwendung von pl.Series mit einem Element funktioniert ebenfalls nicht:

Code: Select all

df.with_columns(pl.Series(["ok"], dtype=pl.Object).alias("metadata"))
# InvalidOperationError: Series metadata, length 1 doesn't
# match the DataFrame height of 3
# If you want expression: Series[metadata] to be broadcasted,
# ensure it is a scalar (for instance by adding '.first()').
Es scheint, dass ich entweder manuell eine pl.Series mit der richtigen Länge erstellen muss (wie pl.Series(["ok"] * df.height, dtype=pl.Object) oder einen Cross-Join wie diesen durchführen muss:

Code: Select all

df.join(pl.Series(["ok"], dtype=pl.Object).to_frame("metadata"), how="cross")
Es funktioniert, ist aber nicht sehr elegant. Gibt es bessere Lösungen?
Hinweis: Ich habe nur als Beispiel ein String-Objekt verwendet. Ich brauche wirklich die Spalte pl.Object, um verschiedene heterogene Daten zu speichern, keine Zeichenfolgen, und kann stattdessen beispielsweise nicht pl.Struct verwenden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post