ЦЕЛИFuzzyWuzzy - Цикл по списку, матч принимается значения и возвращает dataframe
- Учитывая файл Excel (полный опечаток), используйте FuzzyWuzzy для сравнения и матча опечаток против
accepted
списка. - Исправьте заполненный опечатками файл Excel с ближайшим,
accepted
совпадением.
ПОДХОД
- Импорт Excel файл с пандами
- Нажмите оригинал, опечатка заполненного файла Excel в dataframe
- Создать
accepted
dataframe - Сравнить опечатка dataframe с
accepted
dataframe с использованием FuzzyWuzzy - Возврат первоначальное написание, принятое написание, и оценка совпадение
- Append связанные с ним, принял орфографию к первоначальным Ехчли/строки для всех вариантов написания
КОД
#Load Excel File into dataframe
xl = pd.read_excel(open("/../data/expenses.xlsx",'rb'))
#Let's clarify how many similar categories exist...
q = """
SELECT DISTINCT Expense
FROM xl
ORDER BY Expense ASC
"""
expenses = sqldf(q)
print(expenses)
#Let's add some acceptable categories and use fuzzywuzzy to match
accepted = ['Severance', 'Legal Fees', 'Import & Export Fees', 'I.T. Fees', 'Board Fees', 'Acquisition Fees']
#select from the list of accepted values and return the closest match
process.extractOne("Company Acquired",accepted,scorer=fuzz.token_set_ratio)
('Приобретение Пошлины', 38) не высокий балл, но достаточно высоко, что он возвращает ожидаемый результат
!!!!! ВОПРОС !!!! !
#Time to loop through all the expenses and use FuzzyWuzzy to generate and return the closest matches.
def correct_expense(expense):
for expense in expenses:
return expense, process.extractOne(expense,accepted,scorer = fuzz.token_set_ratio)
correct_expense(expenses)
('Расходы', ('Юридические платежи', 47))
ВОПРОСЫ
- Как вы можете видеть, process.extractOne работает правильно при проверке на индивидуальной основе. Однако при запуске в цикле возвращаемое значение является неожиданным. Я считаю, что могу захватить первый или последний столбец, но даже если бы это было так, я бы ожидал появления «Ревизии директора» или «Приобретения» (см. Оригинальный файл excel).
Как минимум две проблемы в 'correct_expense()': вы возвращаетесь внутрь цикла, а имя параметра совпадает с переменной цикла. –