如何使用模糊逻辑匹配和提取熊猫数据框中的文本?

问题描述 投票:3回答:2

我有两个数据框如下:DF1:

Name                     Value
buying fish hook         240
arrange lunch            75
repair equipment         800
purchase air condition   1400
buying fish              66

DF 2:

Name
fish
lunch
equipemt
air condition
hair condition
fish hook

我想匹配数据框和模糊逻辑的名称列中的名称,并将第二个数据框中的名称列添加到第一个:

Name                     Value    item
buying fish hook         240      fish hook
arrange lunch            75       lunch
repair equipment         800      equipment
purchase air condition   1400     air condition

并非所有名字都完全匹配。 Df 2有几个名字,有些还有匹配的单词ex:air condition和hair condition。来自DF 1的分裂值导致错配,其中鱼钩仅与鱼匹配

python pandas
2个回答
0
投票

您可以将pd.Series.applynext和生成器表达式一起使用。在多次匹配的情况下,此方法将优先考虑df2中的行顺序。如果没有找到匹配,find_key将返回None

def find_key(x):
    return next((i for i in df2['Name'].values if x in i), None)

df1['item'] = df1['Name'].apply(find_key)

0
投票
from fuzzywuzzy import process
i = 0
scorethreshold = 70
df1["fuzzy"] = 0
for x in df1.Name:
    noun,score,record = process.extractOne(x,df2.Name)
    if score > scorethreshold:     
        df1.loc[i,'fuzzy'] = noun
    else:
        df1.loc[i,'fuzzy'] = None
    i = i + 1

此代码将比较和匹配文本。根据scorethreshold返回df2值或None。您可以根据df2的精度修改阈值。您可能还想进行一些文本处理以获得更好的结果。

© www.soinside.com 2019 - 2024. All rights reserved.