Pandas выдает правильно отформатированную таблицу. Просто проблема в том, что для текста в телеграм используется не моноширинный шрифт, поэтому при ее отображении колонки так съезжают.
Чтобы исправить это, можно указать ему четко следовать форматированию, добавив тэг 'pre' и обработку как html. Так должно сработать.
def SWHL_sniper():
url = "http://www.swhl.ru/tournament/1026071/stats?common=1"
response = requests.get(url)
df_list = pd.read_html(response.text)
return df_list[0].to_string(index=False)
table = SWHL_sniper()
text=f'<pre>{table}</pre>'
bot.send_message(message.chat.id, text=text, parse_mode='HTML')