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% 的单词像这样组合在一起。提前致谢。
如果想要匹配返回的第一个值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)