Я написал код, соответствующий названиям телевизоров.Я взял только одну строку из моего 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