使用 SequenceMatcher Python 查找熊猫中的所有相似值



我正在尝试过滤列中熊猫中的特定值,但也允许输入错误。我认为使用SequenceMatcher是一个很好的解决方案,但我不知道在数据帧中应用它的最佳方法是什么。假设标题是"数字"和"位置"。

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]

你走在正确的轨道上,使用applyloc你可以过滤 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

最新更新