У меня есть 2 панды DataFrames.Один из них содержит список слов с правильной написанием:
[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 (или не достаточно похожи для соответствия).
Я пыталсяиспользовать 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 != '']
После применения преобразования я должен получить второеФрейм данных выглядит следующим образом:
[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% слов, собранных таким образом, из целого столбца.Заранее спасибо.