Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Форматирование таблиц в Pandas. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
71
Результат:
Для передачи в метод pipe создадим функцию conversion(), воз-
вращающую следующие свойства объекта Styler: размещение текста – по центру, цвет текста в ячейках таблицы – фиолетовый, границы ячеек – сплошные, толщиной 2px, зеленого цвета, формат данных пер­вой строки таблицы – целый, второй строки – процентный:
def conversion(styler): return (styler.set_properties(**{'text-align': 'center', 'color': 'purple','border':'2px solid green' }) .format("{:.0f}",subset=('number',)) .format("{:.0%}",subset=('math_rating',)))
Применим эту функцию к стилизатору Styler с помощью метода
pipe и внесем в таблицу еще несколько изменений. С помощью метода highlight_min закрасим ячейку, содержащую минимальное значение
рейтинга, цветом linen, с помощью метода highlight_null отметим в таб­лице отсутствующие данные красным цветом и уберем номера столб­цов методом hide:
(t.style .pipe(conversion) .highlight_min(subset=('math_rating',),axis=1,color='linen') .highlight_null(props='color: red') .hide(axis=1))
Выполнив объединенный код, получили таблицу:
Распространенным шаблоном использования метода pipe явля-
ется предварительное определение тех операций стилизации, которые можно применить к Styler за один вызов pipe. Применим с созданному датафрейму t единственную функцию стилизации some_highlights(), в которой предусмотрим все необходимые стили таблицы. В этой функ­ции зададим форматирование текста в ячейках, закрасим одним цветом
те ячейки строки 1, в которых значения лежат в пределах от 0.6 до 0.8,
3 . 6 . М е т о д s e t _ t o o l t i ps
Для добавления всплывающих подсказок можно использовать
метод set_tooltips, имеющий синтаксис:
Styler.set_tooltips(ttips, props=None, css_class=None)
а ячейку с максимальным значением в этой строке – другим цветом:
def some_highlights(styler, max_color="blue", color_btw='aqua', row_1='math_rating', row_2='number'): styler.highlight_between(left=.6, right=.8, color=color_btw) styler.highlight_max(color=max_color, subset=('math_rating',), axis=1) styler.format("{:.0f}",subset=(row_2,)) styler.format("{:.0%}",subset=(row_1,)) styler.set_properties(**{'text-align': 'center', 'color': 'purple','border':'2px solid green' }).hide(axis=1) return stylert.style.pipe(some_highlights, max_color="chartreuse", color_btw='cornsilk')
Функция some_highlights() содержит 4 входных аргумента, значе-
ния которых можно переопределить при передаче их в метод pipe. Эти параметры – цвет ячейки, содержащей максимальный элемент, цвет, за­данный в методе highlight_between, и названия строк, к которым приме­няется метод format. Применим созданный стиль оформления дата­фрейма, передав в метод pipe функцию some_highlights и два изменен­ных значения параметров этой функции:
t.style.pipe(some_highlights, max_color="chartreuse", color_btw='cornsilk')
Выполнив код, получили таблицу:
72
73
Параметры метода:
ttips – датафрейм, состоящий из строк, которые будут преобразо-
ваны во всплывающие подсказки, сопоставленные с идентичными зна­чениями столбца и индекса, которые должны существовать в базовых данных Styler. Значения None и пустые строки (' ') будут игнориро­ваться и не повлияют на отображаемый HTML;
props – структура данных list-like или строка. Необязательный па-
раметр. Список кортежей (атрибут, значение) или допустимая строка CSS. Если значения параметра не заданы, то параметр принимает значе­ния, установленные по умолчанию. Свойства по умолчанию для класса всплывающих подсказок CSS: visibility: hidden, position: absolute, z-index:
1, background-color: black, color: white, transform: translate(-20px, -20px).
css_class – строка. Необязательный параметр. Имя класса всплы-
вающей подсказки, используемого в CSS. Должно соответствовать стандартам HTML. Полезно только при интеграции всплывающих под­сказок с внешним CSS.
Всплывающие подсказки, полученные методом set_tooltips, при-
менимы только к элементам данных и не могут использоваться для за­головков столбцов или индексов.
Пример использования метода set_tooltips:
df = pd.DataFrame(data=[[120, 891], [678, 321]]) ttips = pd.DataFrame(data=[["Min", "Мах"], ["", ""]], columns=df.columns, index=df.index) s = df.style.set_tooltips(ttips, props='background-color:green;\ color: white; visibility: hidden; position: absolute') s
Результат:
Краткий комментарий. При наведении курсора на ячейку дан-
ных, расположенную в i-й строке и j-м столбце, появляется подсказка, соответствующая элементу данных data, c теми же индексами.
Еще один пример, в котором в каждой ячейке столбца при наве-
дении на нее курсора появляется одна и та же подсказка:
df = pd.DataFrame(data=[[120, 891], [678, 321]]) ttips = pd.DataFrame(data=[["столбец 0",'столбец 1'],
74
], columns=df.columns, index=df.index) s = df.style.set_tooltips(ttips, props= [('color', 'red'), ('font-size', '2em'), ('visibility', 'hidden',)]) s
Результат:
Для того чтобы вместить текст подсказки, ширина ячейки увели-
чилась.
Подсказку можно заключить в рамку, закруглить ее края, залить
рамку нужным цветом и сместить размещение подсказки (например, сдвинуть вправо на расстояние 10px и приподнять на расстояние 30px), используя свойство transform:
s.style.set_tooltips(ttips, props='visibility: hidden;\ position: absolute; border: 1px solid red;' 'background-color: linen; color: teal; font-size: 1.2em;' 'transform: translate(10px, -30px); padding: 1.1em; \
border-radius: 1em;')
Результат работы кода:
3 . 7 . М е т о д s e t _ c a p t i o n
Метод set_caption предназначен для добавления заголовка к таб-
лице. Синтаксис метода:
Styler.set_caption(caption)
75
Параметр caption задает текст заголовка. Положение заголовка относительно самой таблицы можно задать
с помощью свойства caption-side. Свойство caption-side выводит заголо- вок над таблицей при значении свойства top ('caption-side', 'top') или под таблицей ('caption-side', 'bottom'). С помощью свойства text-align заголо- вок можно выровнять по центру ('text-align', 'center'), по левому или пра- вому краю (значения свойства left и right соответственно). Свойство letter-spacing позволяет написать текст заголовка в разрядку. Можно за­дать шрифт (свойство font-family), его размер (font-size), начертание (font-weight), цвет шрифта (color), заключить заголовок в рамку, закра- сив ее (background), разбить заголовок на несколько строк, задав макси- мальный размер, после которого текст будет переноситься (max-width), прорисовать границы рамки (border), создать тень (text-shadow), сме- стить текст относительно рамки (padding) или таблицы (margin) и т. д.
Применим метод set_caption для создания заголовка таблицы, со-
держащего сведения об успеваемости студентов. Сведения содержатся в файле exams.csv. Выведем на экран 5 первых строк созданного дата­фрейма p и применим к нему некоторые из рассмотренных выше свойств. Код программы:
import pandas as pd p=pd.read_csv("exams.csv") d=p.head(5) d=d.style.set_table_styles( [{'selector': 'caption', 'props': [('caption-side','top') , ('font-family', 'Cambria'), ('font-size', '28pt'), ('text-align', 'center'), ('font-style', 'italic'), ('text-decoration', 'green wavy underline'), ('word-spacing', '6px'), ('color', 'white'), ('background', 'orange'), ('letter-spacing', '2px'), ('padding','35px 35px'), ('border', '3px dashed red'), ('text-shadow','2px 2px green'), ('margin-bottom', '20px'),
76
('border-bottom-color','green'), ('border-top-color','purple'), ('border-bottom-left-radius','18px'), ]}, ]).set_caption("Сведения об успеваемости студентов") d
Результат:
В качестве селектора был использован селектор caption, поэтому
стилизация затронула только заголовок таблицы.
В коде было использовано CSS-свойство margin, с помощью ко-
торого задают внешний отступ от всех четырех сторон объекта (в дан­ном случае от таблицы). Можно использовать это свойство для уста­новки отступа от одной из сторон. Для этого применяют одно из под­свойств: margin-top, margin-right, margin-bottom или margin-left.
Свойство margin может быть задано с использованием одного,
двух, трех или четырех значений. Каждое значение задает длину либо числом (например, 16px), либо в процентах (например, 5 %), либо уста­навливается как auto. Каждое значение может быть положительным, от­рицательным или равным нулю. Если значение задано в процентах, то оно устанавливает размер относительно ширины родительского блока. При задании значения auto значение подбирается автоматически.
Когда определено одно значение, то это значение задается для
всех четырех сторон. Например, ('margin', '20px'). Когда заданы два зна- чения, то первое значение определяет внешний отступ для верхней и нижней сторон, а второе значение – отступ для левой и правой сторон. Например, ('margin', '20px 10px'). Когда определены три значения, то
77
первое значение определяет внешний отступ для верхней стороны, вто­рое значение – внешний отступ для левой и правой сторон, а третье зна­чение – отступ для нижней стороны. Например, ('margin', '10px 3% 1em'). Когда определены четыре значения, они определяют внешние от­ступы для верхней стороны, справа, снизу и слева (по часовой стрелке). Например, ('margin', 10px 3px 30px 5px').
3.8 . М е т о д s e t _ s t i c k y
Если таблица содержит много столбцов и необходимо всегда ви-
деть заголовки строк и столбцов на экране дисплея, используют метод set_sticky, который управляет CSS-стилями таблиц.
Пример. Создадим датафрейм и выведем его на экран в «стан-
дартном» виде и после применения метода set_sticky:
import pandas as pd import numpy as np df_long = pd.DataFrame(np.random.rand(4, 100)) display(df_long) df_long.style.set_sticky(axis="index")
Так выглядит стандартный вывод датафрейма при перемещении
ползунка:
Вид фрагмента датафрейма, выведенного с помощью метода
set_sticky():
78
3.9 . С к р ы т и е д а н н ы х . М е т о д h i d e
С помощью метода hide можно скрыть как заголовки строк
и столбцов, так и отдельные строки или столбцы. Индекс можно скрыть от рендеринга, вызвав метод hide без каких-либо аргументов, что может быть полезным, если индекс целочисленный. Заголовки столбцов можно скрыть, вызвав hide(axis="columns") или hide(axis=1) без каких­либо дополнительных аргументов.
Определенные строки или столбцы можно скрыть от рендеринга,
вызвав тот же метод hide и передав в качестве аргумента метку строки/столбца, список или часть меток строки/столбца subset.
Так можно скрыть две строки (нулевую и вторую) и два столбца
датафрейма df:
import pandas as pd; import numpy as np df=pd.DataFrame({'A':np.linspace(2,10000,4)}) df=pd.concat([df,pd.DataFrame(np.random.randn(4,4), columns= list('BCDE'))], axis=1) df.style.hide(subset=[0, 2], axis=0).hide(subset=["A", "D"], axis=1)
Результат:
Можно составить список скрытых элементов и воспользоваться
им, задавая опции показа:
import numpy as np; import pandas as pd; np.random.seed(0) df = pd.DataFrame(np.random.randn(5, 6)) show = [0, 1, 5] df.style \ .hide([row for row in df.index if row in show], axis=0) \ .hide([col for col in df.columns if col not in show], axis=1)
79
Результат:
В коде использована функция random.seed(0) библиотеки NumPy,
позволяющая при каждом новом запуске программы генерировать один и тот же набор чисел.
3 . 1 0 . Э к с п о р т с т и л и з о в а н н ы х D a t a F r a m e s в E x c e l
Существует возможность экспорта стилизованных DataFrames
в рабочие листы Excel с использованием механизмов OpenPyXL или
XlsxWriter. Обрабатываемые свойства CSS2.2 включают: background­color; border-style properties; border-width properties; border-color proper­ties; color; font-family; font-style; font-weight; text-align; text-decoration; vertical-align; white-space: nowrap.
Пример. Создадим датафрейм df, отформатируем его и экспорти-
руем полученный объект Styler в Excel:
import pandas as pd; import numpy as np df = pd.DataFrame(np.random.rand(3, 4)) df.style.set_properties(**{'background-color': 'yellow', 'font-family': 'Algerian', 'font-size': '14pt', 'border':'3px solid green'}).\ to_excel('d:\Documents\styled3.xlsx', engine='openpyxl')
Результат:
Попытка использовать в качестве имени файла уже существую-
щее в папке назначения имя генерируется сообщением об ошибке.
80
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы с т у д е н т о в
1. Написать программу, в которой пользователь вводит с клавиа-
туры целое число и переводит его в двоичную, восьмеричную и шест­надцатеричную системы счисления с использованием функции format и выводит на экран.
2. В таблице приведены сведения о стоимости автомобилей.
Создать объект DataFrame – autoPrice с тремя столбцами. Четвер-
тый столбец «Повышение, %» рассчитать по данным таблицы и доба­вить в DataFrame. Вывести полученный DataFrame autoPrice после предварительного форматирования:
– в столбце «Автомобиль» значения должны быть выровнены по
центру;
– в столбцах «Цена 2014» и «Цена 2022» значения должны быть вы-
ровнены по центру и в качестве разделителя тысяч использован пробел;
– в столбце «Повышение» указать точность – два знака после запя-
той. Вывести знак плюса или минуса. Выровнять значения по левому краю.
3. В таблице приведены результаты исследования вида досуга,
предпочтительного для россиян 18–35 лет.
Вид досуга
Общаются
с друзьями
Читают
книги
Занимаются
домашними
делами
Занимаются
спортом
Смотрят
телевизор
Ходят
в кино
ВЦИОМ
51
44
14.0
28.0
15.0
21.0
Центр
опросов
48
21
20.0
26.0
46.0
18.0 Росстат
75 4 2.7
1.7
1.6
0.3
Согласно данным, приведенным в таблице, создать объект Data-
Frame – hobby и отформатировать его вывод в соответствии с заданием:
– добавить к выводимой информации строку со средним значе-
нием столбцов датафрейма. Данные в таблице вывести с точностью до
Автомобиль
Цена 2014
Цена 2022
Повышение, %
Toyota RAV4
1248000
2929000
Mazda CX-5
1199000
3051000
Toyota Camry
1141000
3036000
Hyundai Solaris
528900
1411900
Mazda6
999000
2707000
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]