Как я могу использовать Polars.when в зависимости от того, является ли имя столбца None?Python

Программы на Python
Anonymous
Как я могу использовать Polars.when в зависимости от того, является ли имя столбца None?

Сообщение Anonymous »

У меня есть функция Python, которая принимает кадр данных Polars, имя столбца и значение по умолчанию. Функция вернет серию полярных значений (длина равна количеству строк в кадре данных) на основе имени столбца и значения по умолчанию.
  • Если имя столбца равно «Нет», просто верните серию значений по умолчанию.
  • Если имя столбца не «Нет», верните этот столбец из кадра данных в виде серии.
И я хочу добиться этого с помощью всего лишь однострочного полярного выражения.
Ниже приведен пример для лучшей иллюстрации.
Функция, которую я хочу, имеет следующую сигнатуру.

Код: Выделить всё

import polars as pl

def f(df, colname=None, value=0):
pass
Ниже описано поведение, которого я хочу.

Код: Выделить всё

>>> 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
]
Это то, что я пробовал, в основном использую Polars.when.

Код: Выделить всё

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()
Но код выдает ошибку, когда имя столбца равно None, с сообщением об ошибке: TypeError: аргумент 'name': объект 'NoneType' не может быть преобразован в 'PyString'.
Другая проблема заключается в том, что приведенный ниже код выполняется успешно, но возвращает кадр данных с формой (1, 1),

Код: Выделить всё

>>> colname = None
>>> value = 0
>>> df.select(pl.when(colname is None).then(pl.lit(value)).otherwise(100))
shape: (1, 1)
┌─────────┐
│ literal │
│ ---     │
│ i32     │
╞═════════╡
│ 0       │
└─────────┘
Результатом, который мне нужен, является фрейм данных с формой (3, 1), например,

Код: Выделить всё

shape: (3, 1)
┌─────────┐
│ literal │
│ ---     │
│ i32     │
╞═════════╡
│ 0       │
│ 0       │
│ 0       │
└─────────┘
Что мне делать?

Подробнее здесь: https://stackoverflow.com/questions/754 ... me-is-none

Вернуться в «Python»