Polars:在列表元素上运行 polars 表达式以进行行级操作——如何应用 when then otherwise on arr.eval

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

输入数据框 我的极地 |熊猫数据框看起来像这样

x 列 y 列
1 [迈克,金]
2 [ken,nate,lara]

**问:通过遍历每一行中的名称列表来创建词向量; **

来自 polars 的预期输出数据帧

x 列 y 列 z 列
1 [迈克,金] [[0.0001,0.0008],[0.0001,0.0008]]
2 [ken,nate,lara] [[0.0001,0.0008],[0.0001,0.0008]

在这里,我尝试遍历输入数据帧中每一行的名称,如果名称存在于 model_vocab_list 中,则获取该名称的词向量,否则创建一个空向量,

我希望下面的表达式能做到这一点,但它出错了——“Expr”对象不可迭代,在让表达式工作方面有挑战,知道如何让它工作以获得上面的输出

expression= 
pl.when(pl.element().is_in(model_vocab_list )).then(name_model.wv[pl.element()]).otherwise(np.zeros(name_model.wv.vector_size, dtype="float32"))

pl_df = df_pl.with_columns(
    pl.col('y')
).select([
    pl.col('*'),
    pl.col("y").arr.eval(expression, parallel=True).alias("z")
])

pandas 中的工作代码以获得上述输出

ddf['z'] = ddf['y'].apply(lambda x: [model.wv[word] if word in model_vocab_list else np.zeros(model.wv.vector_size, dtype="float32") for word in x])
python-polars
© www.soinside.com 2019 - 2024. All rights reserved.