0

我正在尝试过滤列中 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]

4

1 回答 1

1

你在正确的轨道上,使用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
于 2020-06-30T08:28:56.830 回答