【发布时间】:2019-10-22 14:40:58
【问题描述】:
我有 2 个熊猫数据框。一个包含正确拼写的单词列表:
[In]: df1
[Out]:
words
0 apple
1 phone
2 clock
3 table
4 clean
还有一个拼写错误的单词:
[In]: df2
[Out]:
misspelled
0 aple
1 phn
2 alok
3 garbage
4 appl
5 pho
目标是使用第一个 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 != '']
应用转换后,我应该得到第二个 DataFrame 的样子:
[In]: df2
[Out]:
0
0 apple
1 phone
2 clock
3 NaN
4 apple
5 phone
如果未找到匹配项,则该行将替换为 NaN。我的问题是我得到的结果如下所示:
[In]: df2
[Out]:
misspelled
0 apple
1 phone
2 clockclean
3 NaN
4 apple
5 phone
在写这篇文章的时候,我还没有弄清楚为什么有些词是组合在一起的。我怀疑这与difflib.get_close_matches 匹配长度和/或字母相似的不同单词有关。到目前为止,我在整个专栏中得到了大约 10% - 15% 的单词像这样组合。
提前致谢。
【问题讨论】:
标签: python python-3.x pandas numpy dataframe