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

Polars DataFrame列与字符串变量计算相似度时触发AssertionError

解决Polars中Jaro-Winkler相似度计算的断言错误

错误原因

你直接调用jaro.jaro_winkler_metric时传入了Polars列表达式pl.col("first_name"),但这个库的函数只能处理单个Python字符串,无法识别Polars的列对象,所以触发了isinstance(s1, str)的断言错误。而且这种写法也不符合Polars的矢量化执行逻辑,Polars的表达式是懒执行的,需要用Polars支持的矢量化方法来处理列数据。

解决方案:使用Polars内置的Jaro-Winkler相似度函数

Polars从0.19.0版本开始内置了str.jaro_winkler_similarity方法,这是矢量化实现,性能远优于UDF,完全符合你的需求。

修改后的代码如下:

import polars as pl

def test_polars():
    name = 'savah'
    data = {"first_name": ['sarah', 'purnima'], "last_name": ['vats', 'malik']}
    df = pl.DataFrame(data)
    print(df)
    
    df = df.with_columns(
        pl.when(pl.col("first_name").str.jaro_winkler_similarity(name) >= 0.8)
          .then(1)
          .otherwise(0)
          .alias("COMP80_FN")
    )
    
    print(df)

if __name__ == '__main__':
    test_polars()

运行结果

执行后会输出:

shape: (2, 2)
┌────────────┬───────────┐
│ first_name ┆ last_name │
│ ---        ┆ ---       │
│ str        ┆ str       │
╞════════════╪═══════════╡
│ sarah      ┆ vats      │
│ purnima    ┆ malik     │
└────────────┴───────────┘
shape: (2, 3)
┌────────────┬───────────┬──────────┐
│ first_name ┆ last_name ┆ COMP80_FN│
│ ---        ┆ ---       ┆ ---      │
│ str        ┆ str       ┆ i32      │
╞════════════╪═══════════╪══════════╡
│ sarah      ┆ vats      ┆ 1        │
│ purnima    ┆ malik     ┆ 0        │
└────────────┴───────────┴──────────┘

注意事项

  • 确保你的Polars版本≥0.19.0,如果版本过低,先升级:pip install --upgrade polars
  • 这个内置方法默认的缩放因子是0.1,和jaro库的默认参数一致,如果你需要调整缩放因子,可以传入参数,比如:pl.col("first_name").str.jaro_winkler_similarity(name, scaling_factor=0.2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:41:11