首先,请注意我是python新手,因此提前致歉。但是,我在最后一两天都没有对此进行研究,因此没有运气,因此我在这里发表了第一篇文章。
我需要基于以下格式的CSV文件中的“名称”模糊匹配数据:
Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC
但是,我遇到的问题是我希望fuzzzywuzzy
只查看与迭代中相同位置代码的数据。
因此,在我的第一个循环中,“测试数据,LON”不应与“测试数据,NYC”匹配。
这是我到目前为止所拥有的:
import pandas as pd
import numpy as np
from fuzzywuzzy import process
from fuzzywuzzy import fuzz
data = pd.read_csv('data.csv', delimiter=',', usecols=['Code', 'Name', 'Location'])
for index, row in data.iterrows():
location = row['Location']
name = row['Name']
dd = data[data.Location == location ][['Name']]
result = process.extractBests(name, dd, limit=3)
print(result)
上述想法背后的想法是,遍历我的DataFrame提取位置并将其用作过滤器,以使数据的子集变得模糊不清。
任何帮助或朝着正确方向的转移,将不胜感激。 谢谢。
我希望匹配输出如下,然后我可以根据需要查看布局:
('Test data', [('Test data', 100, 0), ('Test data', 100, 3), ('Data test', 95, 1), ('Other', 34, 2)])
('Data test', [('Data test', 100, 1), ('Test data', 95, 0), ('Test data', 95, 3), ('Other', 36, 2)])
该数据应仅包含来自同一Location
的匹配项。
作为进一步的上下文,我在Name
列中有11万行数据,并且有变化,我想找到这些变化。我只关心同一Location
中的匹配项,因此不必认为有必要基于整个110k数据集进行模糊查找。
答案 0 :(得分:0)
如何将“位置”列用作列表并遍历此列表:
import pandas as pd
import numpy as np
from fuzzywuzzy import process
from fuzzywuzzy import fuzz
data = pd.read_excel('data.xlsx')
location = list(data['Location'].drop_duplicates())
for i in location:
datafiltered = data[data['Location'] == i ]
for j in datafiltered['Name']:
result = process.extractBests(j, datafiltered['Name'], limit=3)
print(result)
我希望它会有所帮助。 BR