我想在
pl.LazyFrame
中连接三个列表列。然而,列表通常包含 NULL 值。导致 pl.concat_list
为 NULL
import polars as pl
# Create the data with some NULLs
data = {
"a": [["apple", "banana"], None, ["cherry"]],
"b": [None, ["dog", "elephant"], ["fish"]],
"c": [["grape"], ["honeydew"], None],
}
# Create a LazyFrame
lazy_df = pl.LazyFrame(data)
list_cols = ["a", "b", "c"]
print(lazy_df.with_columns(pl.concat_list(pl.col(list_cols)).alias("merge")).collect())
┌─────────────────────┬─────────────────────┬──────────────┬───────────┐
│ a ┆ b ┆ c ┆ merge │
│ --- ┆ --- ┆ --- ┆ --- │
│ list[str] ┆ list[str] ┆ list[str] ┆ list[str] │
╞═════════════════════╪═════════════════════╪══════════════╪═══════════╡
│ ["apple", "banana"] ┆ null ┆ ["grape"] ┆ null │
│ null ┆ ["dog", "elephant"] ┆ ["honeydew"] ┆ null │
│ ["cherry"] ┆ ["fish"] ┆ null ┆ null │
└─────────────────────┴─────────────────────┴──────────────┴───────────┘
即使某些值为 NULL,如何连接列表?
我尝试通过
expr.fill_null("")
或 expr.fill_null(pl.List(""))
或 expr.fill_null(pl.List([]))
填充空值,但无法让它运行。如何在 pl.List[str]
类型的列中填充空列表而不是 NULL。有没有更好的方法来连接三个列表列?
您可以使用
fill_null()
:
lazy_df.with_columns(
pl.concat_list(
pl.col(list_cols).fill_null([])
).alias("merge")
)