如何从Python Polars Dataframe的列表列中过滤空字符串?

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

我有一个Python极坐标数据框作为-

df_pol = pl.DataFrame({'test_names':[['Mallesham','','Bhavik','Jagarini','Jose','Fernando'],
                                    ['','','','ABC','','XYZ']]})

我想从 test_names 字段中的每个列表中获取元素计数,不考虑空值。

df_pol.with_columns(pl.col('test_names').list.len().alias('tot_names'))

enter image description here

这里考虑了空字符串的计数,这就是为什么我们可以在list-2中看到6个名字。实际上它只有两个名字。

所需输出为:

enter image description here

python python-polars
2个回答
2
投票

您可以使用

list.eval
在列表元素上运行任何极坐标表达式。在
list.eval
表达式中,您可以
pl.element()
引用列表元素,然后应用表达式。

接下来我们只需使用

filter
表达式来修剪我们不需要的值。

df = pl.DataFrame({
    "test_names":[
        ["Mallesham","","Bhavik","Jagarini","Jose","Fernando"],
        ["","","","ABC","","XYZ"]
    ]
})

df.with_columns(
    pl.col("test_names").list.eval(pl.element().filter(pl.element() != ""))
)
shape: (2, 1)
┌─────────────────────────────────────┐
│ test_names                          │
│ ---                                 │
│ list[str]                           │
╞═════════════════════════════════════╡
│ ["Mallesham", "Bhavik", ... "Fer... │
│ ["ABC", "XYZ"]                      │
└─────────────────────────────────────┘

1
投票

好问题 - 基本上我们想在每个列表元素中应用一个过滤器。

我们通过使用

list.eval
来实现这一点,它允许我们在每行的
Series
内进行操作,并使用
pl.element
作为每行上的
Series
的代理。

(
    df_pol
    .with_columns(
        pl.col('test_names').list.eval(
            pl.element().filter(pl.element().str.len()>0)
         )
         .list.len()
         .alias('tot_names')
     )
)
© www.soinside.com 2019 - 2024. All rights reserved.