在单个数据框中模糊匹配行以在pandas和python中查找重复项

时间:2018-12-04 22:17:50

标签: python pandas duplicates fuzzywuzzy

我偶然发现了我一直在引用的这篇文章:Apply fuzzy matching across a dataframe column and save results in a new column。我正在引用的代码在答案部分,使用模糊的模糊和熊猫。它使用模糊模糊来资助2个数据帧中的重复行。我旨在修改此代码,以便可以检查单个数据框中的行重复项。这是我到目前为止的代码:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import pandas as pd
import SQLAlchemy
import pyodbc

con = 
sqlalchemy.create_engine('mssql+pyodbc://(localdb)\\LocalDBDemo/master? 
driver=ODBC+Driver+13+for+SQL+Server')

compare = pd.read_sql_table(PIM, con)

def metrics(tup):
return pd.Series([fuzz.ratio(*tup),
                  fuzz.token_sort_ratio(*tup)],
                 ['ratio', 'token'])

compare.apply(metrics)
#df1
#compare.apply(metrics).unstack().idxmax().unstack(0)
#df2
#compare.apply(metrics).unstack(0).idxmax().unstack(0)

任何帮助将不胜感激!我还是个菜鸟,所以请多多包涵。谢谢!

2 个答案:

答案 0 :(得分:1)

尝试一个名为pandas-dedupe的软件包。使用模糊匹配和机器学习。

https://pypi.org/project/pandas-dedupe/

我知道您的问题很老,但是上述软件包仍然可以提供帮助。

最后找到解决方案了吗?

答案 1 :(得分:0)

我同意@SCool。 pandas-dedupe 是一个非常好的库,可以做到这一点。下面是一个例子:

import pandas as pd
import pandas_dedupe

df = pd.DataFrame({'name': ['Franc', 'Frank', 'John', 'Michelle', 'Charlotte', 'Carlotte', 'Jonh', 'Filipp', 'Charles', 'Diana', 'Robert', 'Carles', 'Michele']})

dd = pandas_dedupe.dedupe_dataframe(
    df, 
    field_properties = ['name'], 
    canonicalize=True
    )

pandas-dedupe 会要求将一些示例标记为不同的或重复的。完成后,它将通过返回旧名称、规范化名称以及对结果的置信度来处理重复数据删除。

我知道这个问题很老,但我希望一个例子可以帮助人们更快地找到解决问题的方法。