我需要找到Polar数据帧中的列和输入值之间的相似性.我使用的是jaro_winkler_metri值.我在做的时候遇到了错误.我们不想使用UDF函数,因为它会减慢进程.

import polars as pl
import jaro


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( jaro.jaro_winkler_metric(pl.col("first_name"), name) >= 0.8
                          ).then(1).otherwise(0)).alias("COMP80_FN"),

        ]
    )

    print(df)


if __name__ == '__main__':
    test_polars()


C:\PythonProject\pythonProject\venv\Graph_POC\Scripts\python.exe "C:\PythonProject\pythonProject\polars data.py" 
shape: (2, 2)
┌────────────┬───────────┐
│ first_name ┆ last_name │
│ ---        ┆ ---       │
│ str        ┆ str       │
╞════════════╪═══════════╡
│ sarah      ┆ vats      │
│ purnima    ┆ malik     │
└────────────┴───────────┘
Traceback (most recent call last):
  File "C:\PythonProject\pythonProject\polars data.py", line 22, in <module>
    test_polars()
  File "C:\PythonProject\pythonProject\polars data.py", line 12, in test_polars
    (pl.when( jaro.jaro_winkler_metric(pl.col("first_name"), name) >= 0.8
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\jaro\__init__.py", line 43, in jaro_winkler_metric
    return jaro.metric_jaro_winkler(string1, string2)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\jaro\jaro.py", line 235, in metric_jaro_winkler
    ans = string_metrics(string1, string2,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\jaro\jaro.py", line 159, in string_metrics
    assert isinstance(s1, str)
AssertionError

Process finished with exit code 1

推荐答案

错误就在这个代码片段中:

jaro.jaro_winkler_metric(pl.col("first_name"), name)

您将一个Polars表达式传递给jaro_winkler_metric,我怀疑这样的输入函数是否有效,但应该是一个字符串.

相反,您可以try 使用:

df = (
    df
    .with_columns(
        pl.col("first_name").map_elements(lambda first_name: jaro.jaro_winkler_metric(first_name, name)).alias("jwm")
    )
    .with_columns(
        pl.when(pl.col("jwm") >= 0.8).then(1).otherwise(0).alias("COMP80_FN")
    )
)

Python相关问答推荐

Pandas 第二小值有条件

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Django mysql图标不适用于小 case

如何使用html从excel中提取条件格式规则列表?

_repr_html_实现自定义__getattr_时未显示

运行终端命令时出现问题:pip start anonymous"

Python库:可选地支持numpy类型,而不依赖于numpy

如何从.cgi网站刮一张表到rame?

递归访问嵌套字典中的元素值

不允许访问非IPM文件夹

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

如何在BeautifulSoup/CSS Select 器中处理regex?

如何在Great Table中处理inf和nans

为什么dict. items()可以快速查找?

按条件计算将记录拆分成两条记录

如何在Polars中处理用户自定义函数的多行结果?

当lambda函数作为参数传递时,pyo3执行

将时间序列附加到数据帧

IpyWidget Select 框未打开