带有 NULL 值的 concat_list,或如何在 pl.List[str] 中填充 NULL

问题描述 投票:0回答:1

我想在

pl.LazyFrame
中连接三个列表列。然而,列表通常包含 NULL 值。导致
pl.concat_list

为 NULL

MRE

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。有没有更好的方法来连接三个列表列?

python list python-polars
1个回答
0
投票

您可以使用

fill_null()

lazy_df.with_columns(
    pl.concat_list(
        pl.col(list_cols).fill_null([])
    ).alias("merge")
)
© www.soinside.com 2019 - 2024. All rights reserved.