Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Форматирование таблиц в Pandas. Учебно-методическое пособие
.pdf
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 включают: backgroundcolor; border-style properties; border-width properties; border-color properties; 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
