Python匹配脚本不返回True或Fals

2024-09-29 21:42:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一些代码来匹配我的电视名字。我从df中只取了一行,这应该是匹配的,但不是匹配的,以检查我的代码有什么问题:

Data = {'name':  ['LG 43UJ634V'],
        'comp_name': ['LG 43UJ634V'],
        'manufacturer': ['LG'],
        'comp_manufacturer': [''],
        'category': ['TVs']
        }

df = pd.DataFrame(Data, columns = ['name','comp_name', 'manufacturer', 'comp_manufacturer'])

与这些项目匹配的代码如下:

    our_name =df['name'].iloc[0].lower()
    comp_name = df['comp_name'].iloc[0].lower()
    brand = df['manufacturer'].iloc[0].lower()
    comp_brand = df['comp_manufacturer'].iloc[0].lower()

    print('Our name:', our_name)
    print('Comp name:', comp_name)
    print('Brand:', brand)
    print('Comp_brand:', comp_brand)

    our_name = our_name.replace(brand, '').strip()
    our_name = our_name.replace(comp_brand, '').strip()
    print('Our name after brand removal:', our_name)

    splitOurName = our_name.split(' ')
    print('Our name split:', splitOurName)

    counter= 0
    for j in splitOurName:
        if j in comp_name:
            counter = counter + 1
    print('counter:', counter)
    if counter == len(splitOurName):
        if ((len(our_name.split(' ')) == 1 and our_name.isalpha()) or
            (len(comp_name.split(' ')) == 1 and comp_name.isalpha()) or
            len(our_name) <= 4):
            print('No match')
        else:
            print('Perfect match')

我的想法是,我只需要检查我们的名字中字母和数字的独特组合,不需要其他任何东西(没有符号,没有额外的单词,没有品牌等)。如果这个组合是以竞争对手的名义出现的,那么我可以说这是一个匹配。我使用一些计数器来检查是否在竞争对手名称中找到了我们名称中的所有剩余字符串(在本例中,它只是一个字符串,但我的原始数据帧中有许多名称,在所有更正之后都有多个字符串)。如果是这样,那就是一场比赛。所以当前代码打印出“完美匹配”。但如果我用“return True”和“return False”相应地替换最后两个print,当我调用它作为测试数据帧(完全相同的一个)的函数时,就会得到“NaN”。我在这里没有看到的问题是什么

更新:

我更新了dataframe,下面是我调用应用于测试dataframe的函数的方式:

df.loc[df.category.isin(['TVs']), 'match'] = df.loc[df.category.isin(['TVs'])].apply(tv_match, axis=1)

预期结果: df['match']==真

我得到的结果是: df['match']==NaN


Tags: 代码namedflenmatchcounterourlower
1条回答
网友
1楼 · 发布于 2024-09-29 21:42:37

下面的代码对我很有效。您确定您的呼叫正确吗

import pandas as pd

Data = {'name':  ['LG 43UJ634V'],
        'comp_name': ['LG 43UJ634V'],
        'manufacturer': ['LG'],
        'comp_manufacturer': ['']
        }

df = pd.DataFrame(Data, columns = ['name','comp_name', 'manufacturer', 'comp_manufacturer'])

def sample():
    our_name =df['name'].iloc[0].lower()
    comp_name = df['comp_name'].iloc[0].lower()
    brand = df['manufacturer'].iloc[0].lower()
    comp_brand = df['comp_manufacturer'].iloc[0].lower()

    print('Our name:', our_name)
    print('Comp name:', comp_name)
    print('Brand:', brand)
    print('Comp_brand:', comp_brand)

    our_name = our_name.replace(brand, '').strip()
    our_name = our_name.replace(comp_brand, '').strip()
    print('Our name after brand removal:', our_name)

    splitOurName = our_name.split(' ')
    print('Our name split:', splitOurName)

    counter= 0
    for j in splitOurName:
        if j in comp_name:
            counter = counter + 1
    print('counter:', counter)
    if counter == len(splitOurName):
        if ((len(our_name.split(' ')) == 1 and our_name.isalpha()) or
            (len(comp_name.split(' ')) == 1 and comp_name.isalpha()) or
            len(our_name) <= 4):
            return True
        else:
            return False

print(sample())

相关问题 更多 >

    热门问题