CompanyNameMatcherxlsx.py
Сопоставление данныхuser_2065311
python
8 months ago
2.9 kB
3
Indexable
Never
# CompanyNameMatcherxlsx.py ''' Краткое описание: Этот скрипт Python, использующий библиотеку pandas для работы с Excel файлами и fuzzywuzzy для нечеткого сопоставления, автоматизирует процесс сопоставления небрежно записанных названий компаний или ФИО заказчиков с их точными названиями и ИНН. Скрипт считывает данные из файла "2021.xlsx", который содержит два листа: "договоры" с названиями компаний и "ИНН" с точными названиями и ИНН. Затем он ищет наилучшее совпадение для каждого названия из листа "договоры" среди названий из листа "ИНН", используя нечеткое сопоставление, и обновляет лист "договоры" найденными соответствиями и ИНН, если совпадение превышает пороговое значение 85%. Результаты сохраняются в новом файле Excel "2021_updated.xlsx". ''' import pandas as pd from fuzzywuzzy import process def find_best_match(name, choices, threshold=85): # Lowered threshold for closer matches # Use fuzzy matching to find the best match above a certain threshold best_match = process.extractOne(name, choices, score_cutoff=threshold) return best_match def main(): file_path = '2021.xlsx' output_path = '2021_updated.xlsx' contracts_df = pd.read_excel(file_path, sheet_name='договоры') inn_df = pd.read_excel(file_path, sheet_name='ИНН') # Pre-process: Create a list of names for matching choices = inn_df['Наименование'].tolist() for index, row in contracts_df.iterrows(): name = row['Наименование'] best_match = find_best_match(name, choices) if best_match: matched_name, score = best_match # Update the DataFrame with the match results contracts_df.at[index, 'Matched Name'] = matched_name contracts_df.at[index, 'Match Score'] = score # Find the INN for the matched name matched_inn = inn_df.loc[inn_df['Наименование'] == matched_name, 'ИНН'].values[0] contracts_df.at[index, 'Matched INN'] = matched_inn print(f"Matched '{name}' to '{matched_name}' with score {score}") else: print(f"No match found for '{name}'") # Save the updates to a new Excel file contracts_df.to_excel(output_path, index=False) print("Update completed, results saved in file:", output_path) if __name__ == "__main__": main()