CompanyNameMatcherxlsx.py
Сопоставление данныхuser_2065311
python
2 years ago
2.9 kB
10
Indexable
# 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()
Editor is loading...