为了账号安全,请及时绑定邮箱和手机立即绑定

检查并删除 NoneTypes 的 Jaro 字符串相似性

检查并删除 NoneTypes 的 Jaro 字符串相似性

函数式编程 2023-12-12 21:43:37
我试图辨别两个字符串之间的字符串相似性(使用 Jaro)。每个字符串都位于我的数据框中的单独列中。String 1 = df['name_one'] String 2 = df['name_two']当我尝试运行字符串相似性逻辑时:from pyjarowinkler import distancedf['distance'] = df.apply(lambda d: distance.get_jaro_distance(str(d['name_one']),str(d['name_two']),winkler=True,scaling=0.1), axis=1)我收到以下错误: **error: JaroDistanceException: Cannot calculate distance from NoneType (str, str)**太好了,所以列中没有类型,所以我做的第一件事就是检查这一点:maskone = df['name_one'] == Nonedf[maskone]masktwo = df['name_two'] == Nonedf[masktwo]这不会产生 None 类型......此时我正在挠头,但继续以任何方式清理这两列。df['name_one'] = df['name_one'].fillna('').astype(str)df['name_two'] = df['name_two'].fillna('').astype(str) 然而,我仍然得到:error: JaroDistanceException: Cannot calculate distance from NoneType (str, str)我是否正确删除了 NoneTypes?
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

问题

问题并不完全是您只遇到NoneTypes字符串,它也可能引发此异常,正如您在实现中看到的那样distance.get_jaro_distance

if not first or not second:

    raise JaroDistanceException("Cannot calculate distance from NoneType ({0}, {1})".format(

        first.__class__.__name__,

        second.__class__.__name__))

选项1

尝试用“NA”替换您的无类型和/或空字符串或从数据集中过滤它们。


选项2

对可能引发此异常的行使用标志值/距离。在下面的例子中,我将利用999


from pyjarowinkler import distance


df['distance'] = df.apply(lambda d: 999 if not str(d['name_one']) or not str(d['name_two']) else distance.get_jaro_distance(str(d['name_one']),str(d['name_two']),winkler=True,scaling=0.1), axis=1)



查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信