Небольшая проблема с регистром букв, при отправке сообщений телеграм боту
При написании боту имени существа, бот находит его в таблице xlsx в столбике 'Имя существа' или 'Имя существа 1' и выводит значение из этой же строки где произошло совпадение, но уже из нужного мне первого столбика (A). Проблема в том, что он очень чувствителен к регистру букв и я вынужден писать точно так как написано в столбцах 'Имя существа' или 'Имя существа 1'. Например я пишу "Копейщики" и мне выведет "Копейщик", все как нужно. Но я хочу написать "копейщик" или "КОПЕЙщик" и чтобы он вывел мне "Копейщик". Либо "арбалетчики" или "аРбАлеТчиКи" и чтобы он вывел "Араблетчик", ну и т.д. Значения из excel достаю при помощи библиотеки Pandas. Кусок кода с проблемой:
def unit(message):
un = pd.read_excel(r"database.xlsx", sheet_name='units', index_col ='Имя существа')
un1 = pd.read_excel(r"database.xlsx", sheet_name='units', index_col ='Имя существа 1')
a = message.text
unit = (un.loc[a] if a in un.index else un1.loc[a] if a in un1.index else "Ошибка")
bot.send_message(message.chat.id, unit)
Пробовал по разному делать, но самые логичные варианты по типу следующих. Пишу так, не работает:
a = message.text.lower()
И так тоже не работает, выводит "Ошибка":
a = (message.text or message.text.lower())
Ссылка на database.xlsx
https://my-files.su/753e34
Ответы (1 шт):
Попробуйте так:
name, name1 = "Имя существа", "Имя существа 1"
# читаем "Имя существа" как обычный столбец, не как индекс
un = pd.read_excel(r"D:\download\database.xlsx", sheet_name="units")
a = "КОПЕЙщ"
mask = un[name].str.contains(a, case=False) | un[name1].str.contains(a, case=False)
unit = un.loc[mask].iloc[0]
результат:
In [22]: print(unit)
id pikeman
Имя существа Копейщик
Уровень 1
Атака 4
Защита 5
Урон 1-3
Здоровье 10
Скорость 4
Прирост 14
Цена 60 золота
Имя существа 1 Копейщик
Name: 0, dtype: object