如何迭代 Fuzz Ratio 的最大值并导出到新的 CSV 文件
How to iterate over Max Values for Fuzz Ratio and export to new CSV file
我正在尝试编写一些代码,从两个 csv 文件中获取两个名称列表,并使用 fuzzywuzzy
库找到最相似的比较并将它们导出到第三个 csv 文件。
我的代码有两个问题:
- 首先,它不是优化,只是导出我正在计算的所有比率。
其次,它全部导出到单个列,而不是将所有值粘贴在它们自己的相关列中,即 CSV1、CSV2、Fuzz Ratio
from fuzzywuzzy import fuzz
import csv
with open('Documents/test_CSV_1.csv', 'r') as t1, open('Documents/test_CSV_2.csv', 'r') as t2:
fileone = t1.readlines()
filetwo = t2.readlines()
with open('update.csv', 'w') as outFile:
for i in fileone:
for j in filetwo:
outFile.write(i + j+ str(fuzz.ratio(i,j)) + ", " + "\n")
您可以试试下面的代码:
导入包
import pandas as pd
from fuzzywuzzy import fuzz
读取两个csv文件:
df1 = pd.read_csv(''Documents/test_CSV_1.csv')
df2 = pd.read_csv('Documents/test_CSV_2.csv')
创建一个空列表
matched_names = []
写一个Fuzzywuzzy匹配代码
for row1 in df1.index:
name1 = df1.get_value(row1,"Name1") #Name1 is the column name of df1 of an entity to be matched
for row2 in df2.index:
name2= df2.get_value(row2,"Name2") #Name2 is the column name of df2 of entity to be matched
matched_token=fuzz.partial_ratio(name1,name2)
if matched_token> 80: #This is the threshold, you can change according to your neds
matched_names.append([name1,name2,matched_token])
将列表写入 df 和 csv:
df_partial_ratio = pd.DataFrame(columns=['name1', 'name2','matched_token'], data=matched_names)
df_partial_ratio.to_csv("Output.csv", encoding='utf-8')
或者,您也可以根据您的数据和需要使用以下功能,例如 fuzz.ratio
和 fuzz.token_sort_ratio
。只需更改代码中的一行即可使用这些功能,如下所示:
matched_token=fuzz.ratio(name1,name2)
matched_token=fuzz.token_sort_ratio(name1,name2)
我正在尝试编写一些代码,从两个 csv 文件中获取两个名称列表,并使用 fuzzywuzzy
库找到最相似的比较并将它们导出到第三个 csv 文件。
我的代码有两个问题:
- 首先,它不是优化,只是导出我正在计算的所有比率。
其次,它全部导出到单个列,而不是将所有值粘贴在它们自己的相关列中,即 CSV1、CSV2、Fuzz Ratio
from fuzzywuzzy import fuzz import csv with open('Documents/test_CSV_1.csv', 'r') as t1, open('Documents/test_CSV_2.csv', 'r') as t2: fileone = t1.readlines() filetwo = t2.readlines() with open('update.csv', 'w') as outFile: for i in fileone: for j in filetwo: outFile.write(i + j+ str(fuzz.ratio(i,j)) + ", " + "\n")
您可以试试下面的代码:
导入包
import pandas as pd
from fuzzywuzzy import fuzz
读取两个csv文件:
df1 = pd.read_csv(''Documents/test_CSV_1.csv')
df2 = pd.read_csv('Documents/test_CSV_2.csv')
创建一个空列表
matched_names = []
写一个Fuzzywuzzy匹配代码
for row1 in df1.index:
name1 = df1.get_value(row1,"Name1") #Name1 is the column name of df1 of an entity to be matched
for row2 in df2.index:
name2= df2.get_value(row2,"Name2") #Name2 is the column name of df2 of entity to be matched
matched_token=fuzz.partial_ratio(name1,name2)
if matched_token> 80: #This is the threshold, you can change according to your neds
matched_names.append([name1,name2,matched_token])
将列表写入 df 和 csv:
df_partial_ratio = pd.DataFrame(columns=['name1', 'name2','matched_token'], data=matched_names)
df_partial_ratio.to_csv("Output.csv", encoding='utf-8')
或者,您也可以根据您的数据和需要使用以下功能,例如 fuzz.ratio
和 fuzz.token_sort_ratio
。只需更改代码中的一行即可使用这些功能,如下所示:
matched_token=fuzz.ratio(name1,name2)
matched_token=fuzz.token_sort_ratio(name1,name2)