基于条件的数据子集 Fuzzywuzzy
Fuzzywuzzy on subset of data based on conditions
首先,请注意我是一个 python 新手,所以提前致歉。然而,我已经在最后一两天研究了这个,但没有成功 - 因此我的第一个 post 在这里。
我需要根据以下格式的 CSV 文件中的 'Name' 模糊匹配数据:
Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC
但是,我遇到的问题是,我希望 fuzzzywuzzy
只查看与迭代中相同位置代码的数据。
所以在我的第一个循环中,'Test data, LON' 不应该匹配 'Test data, 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 以提取位置并将其用作过滤器以生成数据子集以供 fuzzywuzzy 匹配。
任何帮助,或在正确方向上的推动,将不胜感激。
谢谢。
编辑
我想要匹配输出如下,然后我可以考虑按我认为合适的方式进行布局:
('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
的匹配项。
作为进一步的上下文,我有 11 万行数据,在 Name
列中有变化,我想找到这些变化。我只关心同一 Location
内的匹配项,因此认为没有必要根据我的整个 110k 数据集进行模糊查找。
如何使用您的列 "Location" 作为列表并遍历此列表:
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
首先,请注意我是一个 python 新手,所以提前致歉。然而,我已经在最后一两天研究了这个,但没有成功 - 因此我的第一个 post 在这里。
我需要根据以下格式的 CSV 文件中的 'Name' 模糊匹配数据:
Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC
但是,我遇到的问题是,我希望 fuzzzywuzzy
只查看与迭代中相同位置代码的数据。
所以在我的第一个循环中,'Test data, LON' 不应该匹配 'Test data, 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 以提取位置并将其用作过滤器以生成数据子集以供 fuzzywuzzy 匹配。
任何帮助,或在正确方向上的推动,将不胜感激。 谢谢。
编辑
我想要匹配输出如下,然后我可以考虑按我认为合适的方式进行布局:
('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
的匹配项。
作为进一步的上下文,我有 11 万行数据,在 Name
列中有变化,我想找到这些变化。我只关心同一 Location
内的匹配项,因此认为没有必要根据我的整个 110k 数据集进行模糊查找。
如何使用您的列 "Location" 作为列表并遍历此列表:
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