我有一个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'))
这里考虑了空字符串的计数,这就是为什么我们可以在list-2中看到6个名字。实际上它只有两个名字。
所需输出为:
您可以使用
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"] │
└─────────────────────────────────────┘
好问题 - 基本上我们想在每个列表元素中应用一个过滤器。
我们通过使用
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')
)
)