Eu tenho este exemplo de Polars DataFrame:
import polars as pl
df = pl.DataFrame({
"id": [1, 2, 3, 4, 5],
"variable1": [15, None, 5, 10, 20],
"variable2": [40, 30, 50, 10, None],
})
Estou tentando filtrar todas as colunas do meu dataframe usando o método pl.all()
, e também tentei usar pl.any_horizontal() == Condition
. No entanto, estou recebendo o seguinte erro:
ComputeError: The predicate passed to 'LazyFrame.filter' expanded to multiple expressions:
col("id").is_not_null(),
col("variable1").is_not_null(),
col("variable2").is_not_null(),
This is ambiguous. Try to combine the predicates with the 'all' or `any' expression.
Aqui estão minhas tentativas de enfrentar isso.
# Attempt 1:
(
df
.filter(
pl.all().is_not_null()
)
)
# Attempt 2:
(
df
.filter(
pl.any_horizontal().is_not_null()
)
)
Saída desejada, mas não é escalável para DataFrames maiores:
(
df
.filter(
pl.col("variable1").is_not_null(),
pl.col("variable2").is_not_null()
)
)
Como posso filtrar todas as colunas de forma escalável sem especificar cada coluna individualmente?
Este é provavelmente um lugar onde é útil saber que
pl.all()
é uma abreviação depl.col("*")
Significa apenas "todos os nomes de colunas" nesse sentido. (por exemplo,
SELECT *
do SQL)Isso
all_horizontal()
ainda é necessário.Você precisa compactar as expressões geradas por múltiplas matrizes (imagine que três matrizes saiam dessa primeira matriz
pl.all()
, uma para cada coluna) em uma única coluna. Você pode fazer isso compl.all_horizontal(your, columns, here)
: