[英]Fuzzy Wuzzy String Matching on 2 Large Data Sets Based on a Condition - python
[英]Python - String Matching using Fuzzy Wuzzy (extracting single letters as opposed to words)
目的
获取公司B的会计说明(例如“现金”),并将其与公司A的会计说明(例如“现金汇总”)相匹配。
方法
approved_accts
的帐户 approved_accts
的accts进行比较。 如果模糊模糊匹配高于某个阈值,则将“ approve_accts”标签附加到公司B的会计说明中(最好在相邻列中,这样公司B的原始说明就不会丢失)。 码
import pandas as pd
from fuzzywuzzy import process
from fuzzywuzzy import fuzz
fileLoc = r'...\mapping.xlsx'
xls = pd.ExcelFile(fileLoc)
df_plp = xls.parse('PLP')
df_nbg = xls.parse('NBG')
df_plp.head(10)
#Confirmed the plp.head layout matches the excel file
df_nbg.head(10)
#Confirmed the nbg.head layout matches the excel file
#pull out the Account Descriptions for comparison
approved_accts = df_nbg['Account Description']
plp_accts = df_plp['Account Description']
#Test fuzzywuzzy
process.extract('Cash', 'Cash Cash Rollup')
OUTPUT
process.extract('Cash', 'Cash Cash Rollup')
[('C',90),('a',90),('s',90),('h',90),('C',90)]
process.extractOne('Cash', 'Cash Cash Rollup')
('C',90)
fuzz.token_set_ratio('Cash', 'Cash Cash Rollup')
100
质询
在输出#1、2中-似乎FuzzyWuzzy正在分解每个字符以进行比较(这是不正确的)。 我在网上寻找并发现以下github问题 。 但是,就在昨天,该实现还在处理另一个示例。 我在想,这可能是什么原因?
对于每个帐户描述,都有一个唯一的ID(“帐户编号”)。 有什么办法可以使这个唯一的ID向前发送,以使公司B的“现金”帐户(帐户ID:B123)与公司A的批准列表“现金汇总”(帐户ID:A321)匹配,以便我可以看到哪个帐号需要重新映射吗? 本质上,当我们比较每个公司的帐户描述时,这些帐号只是“随身携带的”,但是当我深入到记帐软件/ ERP系统中时,这些帐号将变得很有价值。
您是否建议使用其他任何库(而不是Fuzzywuzzy)来帮助完成此过程?
RE 1:似乎FuzzyWuzzy的process
函数希望将列表作为第二个参数,所以也许它将字符串解析为字符列表? 请参阅模糊的模糊文档 。 使用pandas series / df .unique()
方法可能也很有意义,以避免必须处理可能的重复项。
RE 2:如果您有一个包含A和B列的表,以及另一个具有C和D列的表,并且有一个从A到C的映射(例如,从模糊字符串匹配中),则可以通过加入来获得一个从B到D的映射A和C上的两个数据帧,然后查找B和D的所有唯一对。类似这样的东西: joined_df[['B', 'D']].unique()
。
RE 3:我个人使用FuzzyWuzzy在模糊字符串匹配中连接两个单独的数据帧,并且没有编写自己的库来完成相同的任务,我认为这可能是最好的方法。 定义一个采用系列并使用FuzzyWuzzy的ExtractOne
选择并返回最接近的匹配的函数是快速且相对容易的。
您是否检查了process.extract https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py#L132的文档?
您需要传递可迭代的内容(列表或字典)
下面的作品:
process.extract('Cash', 'Cash Cash Rollup'.split(' '))
[('Cash',100),('Cash',100),('Rollup',0)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.