Соответствующий скрипт Python не возвращает True или False - PullRequest
0 голосов
/ 03 мая 2019

Я написал код, соответствующий названиям телевизоров.Я взял только одну строку из моего 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» соответственно, я получу «NaN», когда вызову его как функцию для моего тестового фрейма данных (точно такой же).В чем проблема, которую я не вижу здесь?

ОБНОВЛЕНИЕ:

Я обновил фрейм данных, и именно так я вызываю функцию, которая применяется к тестовому фрейму данных.:

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

Ожидаемый результат: df ['match'] == True

Результат, который я получаю: df ['match'] == NaN

1 Ответ

0 голосов
/ 03 мая 2019

Код ниже работал хорошо для меня.Вы уверены, что звоните правильно?

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())
...