Wie kann ich polars.when basierend darauf verwenden, ob ein Spaltenname None ist?Python

Python-Programme
Anonymous
 Wie kann ich polars.when basierend darauf verwenden, ob ein Spaltenname None ist?

Post by Anonymous »

Ich habe eine Python-Funktion, die einen Polardatenrahmen, einen Spaltennamen und einen Standardwert akzeptiert. Die Funktion gibt eine Polarenreihe zurück (mit der gleichen Länge wie die Anzahl der Zeilen des Datenrahmens), basierend auf dem Spaltennamen und dem Standardwert.
  • Wenn der Spaltenname „Keine“ lautet, geben Sie einfach eine Reihe von Standardwerten zurück.
  • Wenn der Spaltenname nicht „Keine“ ist, geben Sie diese Spalte aus dem Datenrahmen als Reihe zurück.
Und ich möchte dies mit nur einem einzeiligen Polarausdruck erreichen.
Unten ist ein Beispiel zur besseren Veranschaulichung.
Die Funktion, die ich möchte, hat die folgende Signatur.

Code: Select all

import polars as pl

def f(df, colname=None, value=0):
pass
Und unten sind die Verhaltensweisen aufgeführt, die ich haben möchte.

Code: Select all

>>> df = pl.DataFrame({"a": [1, 2, 3], "b": [2, 3, 4]})

>>> f(df)
shape: (3,)
Series: '' [i64]
[
0
0
0
]

>>> f(df, "a")
shape: (3,)
Series: '' [i64]
[
1
2
3
]
Das habe ich versucht, grundsätzlich polars.when verwenden.

Code: Select all

def f(df, colname=None, value=0):
return df.select(pl.when(colname is None).then(pl.lit(value)).otherwise(pl.col(colname))).to_series()
Aber der Code gibt einen Fehler aus, wenn colname „None“ ist, mit der Fehlermeldung: TypeError: argument 'name': 'NoneType' object failed to 'PyString'.
Ein weiteres Problem besteht darin, dass der folgende Code erfolgreich ausgeführt wird, aber einen Datenrahmen mit der Form (1, 1) zurückgibt.

Code: Select all

>>> colname = None
>>> value = 0
>>> df.select(pl.when(colname is None).then(pl.lit(value)).otherwise(100))
shape: (1, 1)
┌─────────┐
│ literal │
│ ---     │
│ i32     │
╞═════════╡
│ 0       │
└─────────┘
Das Ergebnis, das ich möchte, ist ein Datenrahmen mit der Form (3, 1), z. B.

Code: Select all

shape: (3, 1)
┌─────────┐
│ literal │
│ ---     │
│ i32     │
╞═════════╡
│ 0       │
│ 0       │
│ 0       │
└─────────┘
Was soll ich tun?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post