Python 基于条件的数据子集模糊化
首先,请注意,我是python新手,所以请提前道歉。然而,我在最后一两天对此进行了研究,运气不佳——因此我在这里发表了第一篇文章 我需要根据以下格式的CSV文件中的“名称”模糊匹配数据:Python 基于条件的数据子集模糊化,python,pandas,dataframe,fuzzywuzzy,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只查看迭代中相同位置代码的数据。 所以在我的第一个循环中,“testdata,LON
Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC
然而,我遇到的问题是,我希望fuzzzywuzzy
只查看迭代中相同位置代码的数据。
所以在我的第一个循环中,“testdata,LON”不应该与“testdata,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)
上面提到的想法是,在我的数据帧中循环提取位置,并使用它作为过滤器来生成数据子集,以供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)])
但此数据应仅包含来自相同位置的匹配项
作为进一步的上下文,我在Name
列中有110k行数据,其中有一些变量,我希望找到这些变量。我只关心同一位置中的匹配项,因此不认为有必要根据我的整个110k数据集进行模糊查找。如何使用列“位置”作为列表并遍历此列表:
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将您的“位置”列用作列表,并反复浏览此列表,如何:
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您可能希望查看-按位置分组,然后根据您的示例模糊搜索名称
字段,给出您希望实现的匹配(即,您希望所有伦敦的分组还是仅前2名伦敦的分组)感谢Josh Friedlander和Dillon Josh的回复,我将查看groupby,谢谢。Dillon,我编辑了我的文章,添加了一些额外的细节。您可能希望查看-按位置分组,然后根据您的示例模糊搜索名称
字段,给出您希望实现的匹配(即,您希望所有伦敦的分组还是仅前2个伦敦的分组)感谢Josh Friedlander和Dillon Josh的回复,我会查看groupby,谢谢。狄龙,我已经编辑了我的文章,增加了一些细节。