Почему Polars запускает мою функцию «тогда», даже если условие «когда» ложно?Python

Программы на Python
Anonymous
Почему Polars запускает мою функцию «тогда», даже если условие «когда» ложно?

Сообщение Anonymous »

Учитывая этот фрейм данных:

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

d1 = pl.DataFrame({
'x': ['a', None, 'b'],
'y': [1.1, 2.2, 3.3]
})
print(d1)

shape: (3, 2)
┌──────┬─────┐
│ x    ┆ y   │
│ ---  ┆ --- │
│ str  ┆ f64 │
╞══════╪═════╡
│ a    ┆ 1.1 │
│ null ┆ 2.2 │
│ b    ┆ 3.3 │
└──────┴─────┘
Я хочу преобразовать строки с ненулевым значением x в некоторый f(x,y)=999, иначе — в ноль.

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

# Using [print(d), 999][-1] hack just to trace calls
d2 = d1.select(
pl.when(pl.col('x').is_not_null())
.then(pl.struct(['x','y']).apply(lambda d: [print(d), 999][-1]))
.otherwise(None)
.alias('s'))

print(d2)

Почему этот вывод print(d) несмотря на правильный d2? Я ожидал, что then будет оцениваться только в том случае, если x.is_not_null.

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

{'x': 1, 'y': 1.1}
{'x': None, 'y': 2.2}  

Подробнее здесь: [url]https://stackoverflow.com/questions/76774163/why-is-polars-running-my-then-function-even-if-the-when-condition-is-false[/url]

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