如何替换 pandas 数据框中拼写错误的单词

Ste*_*ing 5 python numpy dataframe python-3.x pandas

我有 2 个熊猫数据框。其中包含拼写正确的单词列表:

[In]: df1
[Out]:
   words
0  apple
1  phone
2  clock
3  table
4  clean
Run Code Online (Sandbox Code Playgroud)

还有一个拼写错误的单词:

[In]: df2
[Out]:
   misspelled
0        aple
1         phn
2        alok
3     garbage
4        appl
5         pho
Run Code Online (Sandbox Code Playgroud)

目标是使用第一个 DataFrame 中拼写正确的单词列表替换第二个 DataFrame 中拼写错误的单词列。第二个 DataFrame 可以有多个重复项,可以与第一个 DataFrame 具有不同的大小,可以包含第一个 DataFrame 中没有的单词(或者不够相似而无法匹配)。

我一直在尝试使用difflib.get_close_matches并取得了一些成功,但效果并不完美。

这是我到目前为止所拥有的:

x = list(map(lambda x: get_close_matches(x, df1.col1), df2.col1))
good_words = list(map(''.join, x))
l = np.array(good_words, dtype='object')
df2.col1 = pd.Series(l)
df2 = df2[df2.col1 != '']
Run Code Online (Sandbox Code Playgroud)

应用转换后,我应该让第二个 DataFrame 看起来像:

[In]: df2
[Out]:
          0
0     apple
1     phone
2     clock
3       NaN
4     apple
5     phone
Run Code Online (Sandbox Code Playgroud)

如果未找到匹配项,则该行将替换为NaN。我的问题是我得到的结果如下所示:

[In]: df2
[Out]:
    misspelled
0        apple
1        phone
2   clockclean
3          NaN
4        apple
5        phone
Run Code Online (Sandbox Code Playgroud)

在写这篇文章的时候,我还没有弄清楚为什么有些词是组合在一起的。difflib.get_close_matches我怀疑这与匹配长度和/或字母相似的不同单词有关。到目前为止,我从整个专栏中得到了大约 10% - 15% 的单词像这样组合在一起。提前致谢。

jez*_*ael 5

如果想要匹配返回的第一个值get_close_matches,可以根据您所需的阈值调整截止参数,如果不匹配,则使用nextwith可能添加值 - 此处:iternp.nan

x = [next(iter(x), np.nan) 
          for x in map(lambda x: difflib.get_close_matches(x, df1.words, cutoff = 0.6), df2.misspelled)]
df2['col1'] = x

print (df2)
  misspelled   col1
0       aple  apple
1        phn  phone
2       alok  clock
3    garbage    NaN
4       appl  apple
5        pho  phone
Run Code Online (Sandbox Code Playgroud)