python - 使用 SequenceMatcher Python 在 pandas 中查找所有相似值
问题描述
我正在尝试过滤列中 pandas 中的特定值,但也允许输入错误。我认为使用 SequenceMatcher 是一个很好的解决方案,但我不知道在 DataFrame 中应用它的最佳方法是什么。假设标题是“数字”和“位置”。
df1 = [[1, Amsterdam], [2, amsterdam], [3, rotterdam], [4, amstrdam], [5, Berlin]]
如果我想以一定的比率过滤“阿姆斯特丹”,比如说 0.6。输出可能是这样的。
df1 = [[1, Amsterdam], [2, amsterdam], [4, amstrdam]]
完成这项工作的最佳方法是什么?我正在考虑使用过滤器选项,但没有奏效。我是否需要先运行应用函数来添加具有比率的列,然后才能对其进行过滤?还是有更聪明的方法?
df2 = df1[SequenceMatcher(None, location, df1.location).ratio() > 0.6]
解决方案
你在正确的轨道上,使用apply
并且loc
你可以过滤 df. 我已将比率设为 0.7,否则鹿特丹也将匹配。
import difflib
import pandas as pd
df = pd.DataFrame([[1, 'Amsterdam'], [2, 'amsterdam'], [3, 'rotterdam'], [4, 'amstrdam'], [5, 'Berlin']])
df.columns = ['number', 'location']
df = df.loc[df.apply(lambda x: difflib.SequenceMatcher(None, 'Amsterdam', x.location).ratio() > 0.7, axis=1)]
print(df)
number location
0 1 Amsterdam
1 2 amsterdam
3 4 amstrdam
推荐阅读
- mysql - 如何在 MySQL 中创建一个出现计数器,每次计数器发现它出现的 id 都会增加?
- karate - 通过空手道 DSL 中的示例关键字的动态有效负载
- python-3.x - 当特定列值对于某些行数连续时如何获取行
- semantic-versioning - 当项目各部分之间的兼容性不同时如何使用语义版本控制
- uitableview - 如何分配“字符串”类型的值?输入“UIImage?”
- three.js - 为什么我的遮挡剔除在 Three.js 中失败?
- nginx - 如何使 nixos 上的 grafana 在本地网络中可用
- javascript - Discord.js 提醒命令 TypeError: Expected a number
- html - html 中 Angular 的反应式表单控件的语法
- python - 使用 Heroku 部署 Streamlit 应用程序时出现问题