You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars列表元素行级处理:如何用when/then/otherwise生成词向量

Polars实现列表元素词向量映射(修复迭代报错)

数据结构与需求

原始DataFrame结构:

Column xColumn y
1[mike,kim]
2[ken,nate,lara]

需求:遍历每行Column y中的姓名列表,生成词向量列z:

  • 若姓名存在于model_vocab_list,则获取对应词向量
  • 否则生成维度与词向量一致的零向量
    最终新增z列存储对应词向量列表。

问题现状

尝试的Polars表达式报错'Expr' object is not iterable,以下是报错代码及可行的Pandas实现:

报错的Polars代码

# 报错的Polars表达式
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.all(),
    pl.col("y").list.eval(expression).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])

修正后的Polars代码

import polars as pl
import numpy as np

# 定义单元素处理函数
def get_word_vector(word):
    if word in model_vocab_list:
        return name_model.wv[word]
    else:
        return np.zeros(name_model.wv.vector_size, dtype="float32")

# 生成z列
pl_df = df_pl.with_columns(
    pl.col("y").list.map_elements(get_word_vector, return_dtype=pl.Array(pl.Float32, name_model.wv.vector_size)).alias("z")
)

修正说明

报错原因是直接在Polars表达式中使用name_model.wv[pl.element()]——Polars的Expr对象无法被Python的索引操作直接迭代处理。改用list.map_elements将Python层面的词向量查询逻辑包装成可被Polars调用的函数,同时指定返回类型为对应维度的Array,确保类型匹配。

内容的提问来源于stack exchange,提问作者user1753372

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:17:24