Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Форматирование таблиц в Pandas. Учебно-методическое пособие
.pdf
51
Стилизация заголовков таблицы. Поменяем в заголовках таб-
лицы шрифт, его размер и закрасим строки заголовков в желтый цвет.
Код программы:
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(4,4), # случайные числа
index=["строка_1",'строка_2','строка_3','строка_4'],
columns= list('BCDE'))
headers = {
'selector': 'th',
'props': 'background: yellow; font-family: century;\
font-size: 16pt;'
}
df.style.set_table_styles([headers])
Результат работы кода:
Зададим разные стили для индексов и названий столбцов и при-
меним их к аналогично созданному датафрейму df:
col = {
'selector': 'th.col_heading',
'props': 'background: olive; \
color: white;\
font-family: Ink Free;\
font-size: 16pt;'
}
ind = {
'selector': 'th.row_heading',

52
'props': 'background: firebrick; \
color: white;\
font-family: Bradley Hand ITC;\
font-size: 14pt;'
}
df.style.set_table_styles([ind, col])
Результат:
Числа в таблице меняются, так как каждый раз при запуске кода
генерируется новый набор случайных чисел.
Присвоим имя индексу датафрейма df. Зададим стиль для заголов-
ков датафрейма: все заголовки, кроме имени индекса, сделаем красного
цвета, ячейки с ними зальем светло-синим цветом. Для названия индекса
зададим цвет шрифта (зеленый), его размер (12), начертание (normal),
стиль (italic). Код программы с указанными преобразованиями:
df.index.name='СТРОКИ'
index_names = {
'selector': '.index_name', # или "th.row_heading"
'props': 'font-style: italic;\
color: green; font-weight:normal; font-size:12pt'
}
headers = {
'selector': 'th:not(.index_name)',
'props': 'background: lightblue; color: red;\
font-size: 10pt'
}
df.style.set_table_styles([index_names, headers])

53
Результат работы кода:
Стилизация табличных данных. Чтобы применить выбранный
стиль ко всем табличным данным (без заголовков), в качестве селектора
указывают td (table data). Применим к данным созданного датафрейма
df следующие элементы стилизации: цвет данных таблицы – зеленый,
размер кегля – 12 pt, выравнивание – по центру, цвет сплошной границы
ячеек – фиолетовый, сдвиг содержимого ячейки относительно границ –
15px от верхней, правой, нижней и левой границ. Количество знаков
после запятой изменим с 6 (по умолчанию) до 3. Код программы:
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(4,4),
index=["строка_1",'строка_2','строка_3','строка_4'],
columns= list('BCDE'))
df.style.set_table_styles(
[{'selector': 'td',
'props': 'color: green;\
font-size: 12pt; border: 1px solid purple; \
text-align: center; padding: 15px; '}]).format('{:.3f}')
Результат:

54
В коде было использовано CSS-свойство padding, с помощью ко-
торого устанавливают внутренние отступы/поля со всех сторон элемента. Область отступов – это пространство между содержанием элемента и его границей. Отрицательные значения игнорируются. Можно
использовать это свойство для установки отступа от одной из сторон.
Для этого применяют подсвойства padding-top, padding-right, padding-
bottom или padding-left. Значения свойства (или подсвойств) задаются
либо в единицах длины (px, em и т. д.), либо в процентах. Если значение
задано в процентах, то оно устанавливает размер отступа относительно
ширины родительского блока. Если задано одно значение, например
padding: 10px, то оно задает отступы ото всех сторон, если задано два
значения, например padding: 10px 20px, то они задают отступы сверху
и снизу (10px в приведенном примере), слева и справа (20px). При задании трех чисел (padding: 10px 3% 20px) отступы устанавливаются так:
сверху – 10px, слева и справа – отступы по 3 %, снизу – отступ 20px.
Если задано четыре значения, то они задают отступы сверху, справа,
снизу и слева (например, padding: 10px 15px 20px 30px).
Для стилизации столбцов датафрейма можно использовать либо
имя столбца плюс селектор, либо только селектор. Создадим датафрейм
df и применим разные стили к столбцам таблицы: зададим цвет шрифта
всего столбца С, включая заголовок, а в столбце B изменим цвет только
у данных:
import pandas as pd; import numpy as np
df=pd.DataFrame(np.random.randn(4,4),
index=["строка_1",'строка_2','строка_3','строка_4'],
columns= list('BCDE'))
df.style.set_table_styles({
'C': [{'selector': '',
'props': [('color', 'red'),('font-size', '1em')]}],
'B': [{'selector': 'td', 'props': 'color: blue;'}]
}, overwrite=False)
Результат:

55
Тот же результат можно было получить с использованием селек-
торов col1 и td.col0, выполнив код:
col_1= {'selector':'.col1',
'props': [('color', 'red'),('font-size', '1em')]}
col_2={'selector':'td.col0',
'props': [('color', 'blue')]}
df.style.set_table_styles([col_1, col_2])
Для стилизации строк таблицы используют либо индекс строки
и селектор, указывающий, к каким данным строки применить стилизацию, либо только селектор, если изменения затрагивают всю строку.
Так можно изменить размер кегля в данных строки с номером 0 (индекс
строки: строка_1):
df.style.set_table_styles({
'строка_1': [{'selector': 'td', 'props': [('font-size', '16px')]}]
}, axis=1, overwrite=False)
Результат:
Тот же результат можно было получить, выполнив код:
df.style.set_table_styles(
[{'selector': 'td.row0',
'props': [('font-size', '16px')]}])
При стандартном выводе датафрейма на экран он представляет
собой чередующиеся белые и серые строки без границ ячеек. Создадим
новый датафрейм df_new. Закрасим заголовки строк и столбцов датафрейма в желтый цвет, нечетные строки сделаем оливкового цвета,
а четные – голубого. Содержимое ячеек выровняем по центру. Заголовки столбцов сделаем в несколько строк. Код программы:
import pandas as pd
import numpy as np
df_new=pd.DataFrame(np.random.randn(4,2),

56
columns=['Исходные данные', 'Значение 2 - \
результаты расчетов'])
df_new.style.set_table_styles([
{'selector': 'th', 'props':
'text-align: center; color: red;\
font-size: 1.5em; background: yellow;\
max-width: 140px'},
{'selector': 'td', 'props': 'text-align: center;\
font-weight: bold;'},
{'selector': 'tr:nth-of-type(odd)',
'props': [('background', 'olive')]},
{'selector': 'tr:nth-of-type(even)',
'props': [('background', 'cyan')]},
], overwrite=False)
Результат:
С помощью свойства max-width со значением 140px (max-width:
140px) была задана максимальная ширина ячейки, после достижения
которой текст переносился на другую строку.
Стилизация таблицы с помощью псевдокласса :hover. С помощью
селектора hover можно задать действия, которые будут происходить при
наведении курсора на элементы таблицы. При этом нужно указать, при
наведении на какой элемент таблицы эти действия будут осуществляться:
при наведении на строку, заголовок, отдельную ячейку и т. д.
Создадим датафрейм df, в котором при перемещении курсора по
табличным данным предусмотрим выделение строки, в которой находится курсор, желтым цветом. Код программы:
import pandas as pd ; import numpy as np
df=pd.DataFrame(np.random.randn(4,4),

57
index=["строка_1",'строка_2','строка_3','строка_4'],
columns= list('BCDE'))
df.style.set_table_styles([{'selector': 'tr:hover',
'props': [('background-color', 'yellow')]}])
Результат:
Если при наведении курсора нужно закрасить не всю строку,
а лишь ячейку с данными, в которой курсор находится, тип селектора
нужно заменить на 'td:hover':
df.style.set_table_styles([{'selector': 'td:hover',
'props': [('background-color', 'yellow')]}])
Результат:
Если нужно закрасить заголовки таблицы, в качестве селектора
можно выбрать th:hover, th.col_heading:hover или th.row_heading:hover.
Задать свойства шрифта и фона можно с использованием строк
CSS. Например, так:
df.style.set_table_styles(
[{'selector': 'tr:hover',
'props': 'background-color: fuchsia; font-size: 1.5em;'}])
Результат:

58
В коде, кроме закрашивания строки, при наведении на нее кур-
сора было предусмотрено увеличение размера шрифта этой строки.
Так можно задать изменение размера шрифта при наведении кур-
сора на элемент данных заданной строки:
df.style.set_table_styles({
'строка_1': [{'selector': 'td:hover',
'props': [('font-size', '3rem')]}]
}, axis=1, overwrite=False)
Результат:
Создание границ ячеек таблицы. С помощью Styler можно задать
и отформатировать границы как всей таблицы, так и ее отдельных
столбцов, заголовков и/или отдельных ячеек. Для этого используют
свойство border и его производные border-left, border-right и т. д. Возможно использовать следующие стили границы: None (нет границ), hid-
den (скрытая граница), solid, dotted, inset, outset, dashed, groove, thick
double, ridge, medium dashed и др.
Так можно создать датафрейм s и задать разные границы для
названий строк и столбцов, и остальных табличных данных:
import numpy as np
import pandas as pd
s=pd.DataFrame({'A':np.linspace(1,6,7)})
s=pd.concat([s,pd.DataFrame(np.random.randn(7,4),
columns=list('BCDE'))],axis=1)
s.style.set_table_styles([{'selector': 'td',
'props': 'border: 2px solid orange'},
{'selector': 'th', 'props':
'border: 2px solid olive'}],
overwrite=False, axis=0)

59
Результат:
Так можно задать только внешнюю границу нужных толщины
и цвета:
s.style.set_table_styles([{'selector': '',
'props': 'border: 2px solid orange'}],
overwrite=False)
Результат:
Так можно задать границы только в столбце B датафрейма s:
s.style.set_table_styles({
'B': [{'selector': 'th', 'props':
'border-left: 2px solid red '},
{'selector': 'td', 'props':
'border: 3px solid purple'}]
}, overwrite=False, axis=0)

60
Там, где находятся данные столбца В, расставлены все границы
заданного стиля (solid), толщины и цвета. У заголовка столбца B задана
только левая граница ячейки (цвет границы – красный, толщина 2px).
Можно задать свой цвет нижней (верхней) границы ячеек:
s.style.set_table_styles([{'selector': '*',
'props': 'border: 1px solid;\
border-bottom: 2px solid red'}], # border-top
overwrite=False)
Результат:
В приведенных далее примерах показаны выведенные на экран
датафреймы с разными стилями границ.
Так можно задать два разных стиля границ: в ячейках с данными
задан стиль ridge, для границ заголовков – стиль inset:
import pandas as pd
dd = pd.DataFrame({
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
