基于条件模糊处理数据子集

时间:2019-02-20 13:48:55

标签: python pandas dataframe fuzzywuzzy

首先,请注意我是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数据集进行模糊查找。

1 个答案:

答案 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