有效地删除pandas DataFrame列中的相似字符串

问题描述

我有一个数据帧,其中一首歌的歌词(每行一首歌),而且我知道其中有多个重复项,这些重复项并不完全相同,但是拼写有所不同。我写了下面的代码,该代码有效,但是速度很慢,因为歌词是很长的字符串,并且数据帧有1000行以上。有没有更优雅/有效的编码方式?

def similar(a,b):
    return SequenceMatcher(None,a,b).ratio()

def mark_duplicates_within_column(df,column,alpha = 0.95):
    df['duplicate'] = [False]*df.shape[0]

    for i,val_a in enumerate(tqdm_notebook(df[column])):
        if df['duplicate'].iloc[i] == True:
            continue
        for j,val_b in enumerate(df[column]):
            if df['duplicate'].iloc[j] == True:
                continue
            if val_a == val_b:
                continue
            elif similar(val_a,val_b) > alpha:
                df['duplicate'].iloc._setitem_with_indexer(j,True)
                
    return df

这是我要实现的目标的一个玩具示例:

>>> df = pd.DataFrame(columns = ['names'],data = ['Thomas Müller','Thomas Muller','Toni Kroos'])
>>> mark_duplicates_within_column(df,'names',alpha=0.9)
    
    names       duplicate
0   Thomas Müller   False
1   Thomas Muller   True
2   Toni Kroos  False

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)