【发布时间】:2019-02-20 13:48:55
【问题描述】:
首先,请注意我是 python 新手,所以提前道歉。然而,我在最后一两天对此进行了研究,但没有运气 - 因此我在这里发表了第一篇文章。
我需要根据 CSV 文件中的“名称”模糊匹配数据,格式如下:
Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC
我遇到的问题是,我希望fuzzzywuzzy 只查看与迭代中相同位置代码的数据。
所以在我的第一个循环中,“测试数据,LON”不应该匹配“测试数据,纽约”。
这是我目前所拥有的:
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 列中有 110k 行数据,我想找到这些变化。我只关心同一个Location 中的匹配项,因此认为没有必要根据我的整个 110k 数据集进行模糊查找。
【问题讨论】:
-
您可能想查看groupby - 按位置分组,然后模糊搜索
Name字段 -
从您的示例中给出您希望实现的匹配(即您想要所有伦敦的分组还是仅伦敦前 2 个)
-
感谢 JoshFriedlander 和 Dillon Josh 的回复,我会查看 groupby,谢谢。狄龙,我已经编辑了我的帖子,添加了一些额外的细节。
标签: python pandas dataframe fuzzywuzzy