@bezden

Как выравнивать столбцы Pandas для красивого вывода в терминале?

Добрый день!
Помогите понять, почему в онлайн интерпретаторе простая таблица - трехколонка выглядит так:

65e0a36b6fbdc299375673.png

А в родном IDLE питона выглядит вот так:

65e0a4485d904975528168.jpeg

Дело в том, что эта эта инфа улетает из IDLE в бота такая же "кривая", как на второй картинке. У меня от этого агрессия какая-то и зубы скрипят.

Табличка сформирована с помощью pandas. Но я попробовал так же модули tabulate, prettytable и texttable. Везде одна и таже шляпа, применение всяких параметров выравнивания результатов тоже не дает.
Извините, если вопрос глупый, занимаюсь всего пару недель.
Сам код неказистый
import pandas as pd

systems = ['ХВС стояки', 'ГВС стояки', 'ПСД', 'КАН маг.',
                  'Фасад', 'Электрика', 'Крыша', 'ЦО стояки', 'Подвал', 'ЦО маг.']
proc_current = ['0,00', '0,00', '0,00', '10,00', '0,00', '25,00', '0,00', '0,00', '0,00', '0,00']
proc_plan = ['0,00', '0,00', '33,33', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00']

df = pd.DataFrame({'Системы:': systems, 'Текущий %:': proc_current, 'Плановый %:': proc_plan})
print (df)


Или например через pretty table с align параметрами:
from prettytable import PrettyTable

PRtable = PrettyTable()

PRtable.add_column ('Системы:', systems)
PRtable.add_column ('Текущий %:', proc_current)
PRtable.add_column ('Плановый %:', proc_plan)
PRtable.align['Текущий %:'] = "c"
PRtable.align['Плановый %:'] = "c"
PRtable.align['Системы:'] = "r"

print (PRtable)


как всё это выровнять люди добрые?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@Everything_is_bad
Причина одна, для ровного вывода нужно использовать моноширинные шрифты, иначе хоть как будет криво.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ZhenyaMak
@ZhenyaMak
Писать качественный софт? Пфф, это не для меня.
Ну это скорее сама IDE задаёт стилизацию, или я не понимаю
Ответ написан
Maksim_64
@Maksim_64
Data Analyst
С учетом того что в родном IDE все не ровно, то на ум приходит только следующая причина. Тип данных твоих колонок 'object' или 'string' и строки содержат пробелы в начале и в конце. В общим нужно применить метод strip (удалить лишние пробелы в начале и в конце строки).
result = df.assign(**{
    'Системы:':lambda x:x['Системы:'].str.strip(),
    'Текущий %:':lambda x:x['Текущий %:'].str.strip(),
    'Плановый %:':lambda x:x['Плановый %:'].str.strip()
})
print(result)

Если речь именно об этих данных что ты приложил в примере, то в моем python IDE они выглядят вот так
65e0b054c7d7a530628786.png
Как видишь вполне себе ровно, это без моего кода удаления пробелов. Так как в предоставленных тобой данных нет лишних пробелов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы