如何从可能的字符串列表中替换python中的字符串

2024-09-28 16:21:42 发布

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

我有一列数据如下:

df = pd.DataFrame({'Ex1':['apple','apple1','Peear','peAr','b$nana','Bananas'],
'Ex2': ['Applet','banan','apples','PAIR','banana','apple'],
'Ex3':['Pears', 'Banaa', 'Apple', 'apple1', 'pear', 'abanana]}); df

然后我有三个数组,将拼写错误的水果类型识别为标准水果类型:

^{pr2}$

我如何迭代每一列,把拼错的水果改成正确的。一、 e.最终数据帧应如下所示:

    Ex1     Ex2     Ex3
0   apple   apple   pear
1   apple   banana  banana
2   pear    apple   apple
3   pear    pear    apple
4   banana  banana  pear
5   banana  apple   banana

我知道我可以通过以下代码实现这个结果:

replacements = {
    "apple":'apple1',
    "apple":'Applet',
...}

df['Ex1'].replace(replacements, inplace=True)

但是我有一个1000多行的列表,我不想在replacements中进行每一次替换,因为这将花费很多时间。在

有什么建议可以用我的applepear和{}变量来实现这个目的吗?在


Tags: 数据类型appledataframedfpdbananapear
2条回答

更准确的解决方案是计算拼写错误的单词和拼写正确的单词之间的相似度比率。在Python中可用的少数几个库中,我使用了Levenshtein库,它有一个返回相似比的ratio函数。获取比率非常简单,例如:

from Levenshtein import ratio
ratio('banana', 'Banaa')
#0.7272727272727273

现在,如果我们有下面的正确单词列表correct_words,那么将计算序列中每个单词与correct_words中每个单词之间的比率。在

^{pr2}$

这意味着每个元素将有三个比率值。然而,我们只关心最大比率值和与之相关的正确单词。{and dictionary{and The intermediate words}创建一个中间值为cd3}的函数。函数返回具有最大值的键。最后,我们将函数返回的键映射到dataframe的每个元素中。在

from Levenshtein import ratio
import operator

def similarity(x):
    l = {}    
    for i in correct_words:
        l[i] = ratio(x,i)
    return max(l.items(), key=operator.itemgetter(1))[0]


df.applymap(similarity)
    Ex1     Ex2     Ex3
0   apple   apple   pear
1   apple   banana  banana
2   pear    apple   apple
3   pear    apple   apple
4   banana  banana  pear
5   banana  apple   banana

简单(甚至可能过于简单)的方法涉及手写拼写错误列表,只需从列表中构建字典即可实现自动化:

repl={s:n for n,l in [("apple",apple),("pear",pear),("banana",banana)]
      for s in l}

如果正确名称和拼写错误位于某个数据结构(如包含字典)中,则可以自动构建每个名称的正确名称和拼写错误列表。(可以使用globals()locals()作为字典,但是必须过滤掉无关的条目。)

相关问题 更多 >