使用SequenceMatcher Python查找pandas中的所有类似值

2024-10-01 02:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

df1 = [[1, Amsterdam], [2, amsterdam], [3, rotterdam], [4, amstrdam], [5, Berlin]]

如果我想以一定的比率过滤“阿姆斯特丹”,比如说0.6。输出可能是这样的

df1 = [[1, Amsterdam], [2, amsterdam], [4, amstrdam]]

完成这项工作的最佳方式是什么?我在考虑使用一个过滤器选项,但是没有用。我是否需要首先运行apply函数来添加一个具有比率的列,然后才能对其进行筛选?还是有更聪明的方法

df2 = df1[SequenceMatcher(None, location, df1.location).ratio() > 0.6]


Tags: 数据方法标题number错误location解决方案比率
1条回答
网友
1楼 · 发布于 2024-10-01 02:33:12

您的思路是正确的,使用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

相关问题 更多 >