Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Форматирование таблиц в Pandas. Учебно-методическое пособие
.pdf
11
1.232455e+04
1.232455E+04
12324.5
3.45679E+06
NAN
nan
2.469%
Краткий комментарий. В первом случае для вывода число было
округлено до 6 (по умолчанию) знаков после запятой, во втором – для
вывода числа было выделено 7 знаков после запятой. В следующих
двух примерах было выведено по 6 (по умолчанию) цифр после запятой
и число выведено в экспоненциальной форме. В форматах g и G было
выведено по 6 значащих цифр, значение nan выведено в разных регистрах, и, наконец, число c выведено в формате %.
Кроме «стандартной» формы вывода на экран, доступна альтерна-
тивная форма, предполагающая использование опции #. Альтернативная
форма определяется по-разному для разных типов данных. Этот параметр
действителен только для целых чисел, чисел типа float и сложных типов
данных. Для целых чисел, когда используется вывод двоичных, восьмеричных или шестнадцатеричных чисел, эта опция добавляет к выходному
значению соответствующий префикс '0b', '0o', '0x' или '0X'. Для чисел с плавающей запятой альтернативная форма приводит к тому, что результат
преобразования всегда содержит символ десятичной точки. Кроме того,
для преобразований 'g' и 'G' конечные нули не удаляются из результата.
Пример на применение опции #:
s=1234432
print(format(s, "*<+#9_x"))
print(format(s, "+#.0f"))
print(format(s, "+.0f"))
Результаты:
Разделители десятков (grouping_option) ',' или '_' используются
для чисел в качестве разделителя тысяч.
Пример:
s=1234;
print("{:_}".format(s))
Результат:
1_234

12
1 . 2 . Ф о р м а т и р о в а н и е т а б л и ч н ы х д а н н ы х
Для визуализации табличных данных настройка стиля и отобра-
жение вывода должны выполняться после обработки данных
в DataFrame. Атрибут DataFrame.style – это свойство, которое возвращает объект Styler. Для него определен метод _repr_html_, поэтому он
автоматически отображается в Jupyter Notebook.
Для отображения DataFrame в различных форматах, включая
формат таблицы, можно использовать функцию display(). Пример ее
применения для вывода содержимого датафрейма на экран:
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(4,4),
columns= list('BCDE'))
display(df)
Результат:
Если число в таблице нецелое, оно выводится с 6 знаками после
запятой, что требуется далеко не всегда. Класс Styler предоставляет гораздо более мощный способ стилизации и форматирования таблиц, чем
тот, что может предложить функция display(). Чтобы использовать
класс Styler, сначала необходимо создать объект Styler на основе
DataFrame. Затем можно использовать созданный объект, чтобы применить к таблице различные параметры форматирования. В данном параграфе речь пойдет о форматировании текстового отображения значений
ячеек, для чего используют метод Styler.format(). Синтаксис метода:
Styler.format(formatter=None, subset=None, na_rep=None, precision=None, decimal='.', thousands=None, escape=None, hyperlinks=None)
Параметры метода:
formatter – строка, словарь, вызываемая функция или значение
None. Способ отображения данных. Например: '{:.2f}', {0: lambda v:
upper(v)}, {0: '{:.2f}', 1: '€ {:.1f}'};

13
subset – метка, объект array-like или IndexSlice. Необязательный
параметр, предназначенный для выбора определенных строк, столбцов
или ячеек. Например, subset=[0,1], subset=[0], subset=(0, ), sub-
set=(slice(0,5,2), "A"), subset=(["B2", "D4"], slice(None)), subset=(["B2",
"D4"], ["A","C"]);
na_rep – строка. Задает способ представления отсутствующих
значений. Например: na_rep='MISS';
precision – целое число. Точность с плавающей запятой, исполь-
зуемая для отображения, если она не определена. Например:
precision=4;
decimal – символ, используемый в качестве десятичного раздели-
теля для чисел с плавающей запятой, комплексных и целых чисел.
По умолчанию используется точка;
thousands – символ, используемый в качестве разделителя групп
разрядов для чисел с плавающей запятой, комплексных и целых чисел.
Например, символ _;
escape – параметр, используемый для работы с текстом HTML
и LaTex. Значения параметра "html", "latex";
hyperlinks – параметр для преобразования строковых шаблонов,
содержащих https://, http://, ftp:// или www.
Для форматирования текстового отображения значений меток
индекса или заголовков столбцов применяется метод
styler.format_index() со схожим синтаксисом:
styler.format_index(formatter=None, axis=0, level=None, na_rep=None,
precision= None, decimal='.', thousands=None, escape=None, hyperlinks=None)
Рассмотрим работу метода на примере созданного в начале раз-
дела датафрейма df.
Сократим в выводимом датафрейме количество знаков после за-
пятой с шести (по умолчанию) до двух:
df.style.format(precision=2)
Результат:

14
Тот же результат получится при таких способах задания формата:
df.style.format(precision=2,subset=None) или df.style.format('{:.2f}').
Изменим количество знаков после запятой в одной из строк
(например, в строке с номером 2):
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(4,4),
columns= list('BCDE'))
df.style.format(precision=2,subset=(2,))
Результат работы кода:
Так можно изменить количество знаков после запятой в столбце
(например, С) созданного датафрейма:
df.style.format(precision=2,subset=(['C'])) # или subset=('C')
Результат:
Понятно, что с каждым запуском кода мы получаем разные
данные, поскольку генерируются случайные числа с заданным законом
распределения.
Так можно задать один и тот же формат для двух столбцов:
df.style.format(precision=2,subset=(['C','D']))
Выполнив указанное форматирование, получили

15
Отформатировать три строки можно так:
df.style.format(precision=2,subset=([2,1,0],))
Результат:
Можно отформатировать отдельные строки указанного столбца:
df.style.format(precision=2, subset=([2,1,0],"C"))
Результат:
Создадим новый датафрейм df_1 с одним отсутствующим
значением:
import pandas as pd
import numpy as np
df_1=pd.DataFrame({'A':np.linspace(2,10000,4)})
df_1=pd.concat([df_1,pd.DataFrame(np.random.randn(4,4),
columns= list('BCDE'))], axis=1)
df_1.iloc[0,3]=np.nan; display(df_1)
Выполнив код, получили датафрейм
Внесем в выводимые данные следующие изменения. Изменим
точность выводимых значений (три знака после запятой вместо шести

16
по умолчанию), десятичные разделители и разделители тысяч, в строковых данных сделаем все буквы строчными и изменим индексы на
символьные, заменим значения NaN на символ "-":
df_1.style \
.format(precision=3, thousands="_", decimal=",", na_rep="-") \
.format_index(str.lower,axis=1) \
.relabel_index(["row 1", "row 2", "row 3", "row 4"], axis=0)
Результат:
Применение методов объекта Styler не изменяет значений исход-
ного датафрейма.
Для форматирования определенных столбцов можно использо-
вать словарь: df.style.format({"B": "{:.3f}", 'C': '{:+.2f}'}). Результат:
Два или более объекта Styler могут быть объединены вместе при
условии, что они используют одни и те же столбцы. С помощью данной
опции можно отображать сводную статистику для DataFrame. Этот
прием часто применяется в сочетании с DataFrame.agg. Добавим к выводимой информации о датафрейме df_1 две строки, содержащие средние значения и среднеквадратические отклонения столбцов датафрейма. Предусмотрим разную точность вывода имеющихся данных
и добавленных строк:
summary_styler = df_1.agg(["mean", "std"]).style \
.format(precision=2) \
.relabel_index(["Среднее", "Отклонение"])
df_1.style.format(precision=3).concat(summary_styler)

Результат:
Данные в новых строках выведены с двумя знаками после запятой.
17

2. В С Т Р О Е Н Н Ы Е С Т И Л И
Стандартный вывод датафрейма на экран представляет собой че-
редующуюся последовательность серо-белых строк с данными и индексами строк и столбцов, например следующую:
Ширина ячейки в столбце автоматически подбирается так, чтобы
уместить самые длинные данные столбца в одну строку. Так, для последнего столбца ширина ячейки определяется длиной его заголовка,
а для столбца А – числовыми данными (шесть знаков после запятой по
умолчанию для данного типа данных). От автоматического выбора ширины ячейки можно отказаться и задать нужные размеры ячеек каждого
столбца, разбив, например, заголовок на несколько строк. Можно также
изменить формат вывода чисел, сделав его разным для разных ячеек,
расставить границы ячеек таблицы, выделить цветом нужные элементы
таблицы и т. д. Для этого пользователь имеет возможность либо создать
свой стиль, либо воспользоваться имеющимися встроенными стилями
без написания дополнительного кода. К встроенным относятся стили,
устанавливаемые с помощью методов highlight_null, background_gradi-
ent, text_gradient, bar, highlight_max, highlight_min, highlight_between
и highlight_quantile. Их использование позволяет выделять цветом
определенные элементы таблиц. Существует множество цветов, которые можно использовать для стилизации таблиц, и несколько способов
их задания.
2 . 1 . Ц в е т а , п о д д е р ж и в а е м ы е в H T M L
Одним из основных параметров при стилизации таблицы является
цвет. С помощью CSS мы можем управлять основным цветом элементов
(цветом переднего плана – свойство foreground color, или просто color),
18

19
который описывает цвет текста элемента и цвет элементов оформления
текста, и их фоновым цветом (background-color, или background). При задании свойства цвет можно использовать названия цвета, его шестнадцатеричный код, модели RGB, RGBA и HSL, LCH, OKLCH, глобальные
значения inherit, initial, unset, идентификатор currentColor.
CSS поддерживает стандартные наименования цветов, которые
можно использовать, просто указывая в качестве значения свойства color имя нужного цвета, например color='pink' или background:
purple. Список именованных цветов, поддерживаемых в matplotlib,
можно получить, выполнив код1:
import math
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.patches import Rectangle
def plot_colortable(colors, *, ncols=4,
sort_colors=True):
cell_width = 212; cell_height = 22
swatch_width = 48 ; margin = 12
# Сортировка цветов по оттенку, насыщенности, значению
и названию:
if sort_colors is True:
names = sorted(
colors, key=lambda c: \
tuple(mcolors.rgb_to_hsv(mcolors.to_rgb(c))))
else:
names = list(colors)
n = len(names)
nrows = math.ceil(n / ncols)
width = cell_width * ncols + 2 * margin
height = cell_height * nrows + 2 * margin
dpi = 72
fig, ax = plt.subplots(figsize=(width / dpi,
height / dpi), dpi=dpi)
fig.subplots_adjust(margin/width, margin/height,
1
List of named colors: сайт. URL: https://matplotlib.org/stable/gallery/color/named_colors.html

20
(width-margin)/width,
(height-margin)/height)
ax.set_xlim(0, cell_width * ncols)
ax.set_ylim(cell_height * (nrows-0.5), -cell_height/2.)
ax.yaxis.set_visible(False)
ax.xaxis.set_visible(False)
ax.set_axis_off()
for i, name in enumerate(names):
row = i % nrows
col = i // nrows
y = row * cell_height
swatch_start_x = cell_width * col
text_pos_x = cell_width * col + swatch_width + 7
ax.text(text_pos_x, y, name, fontsize=14,
horizontalalignment='left',
verticalalignment='center')
ax.add_patch(
Rectangle(xy=(swatch_start_x, y-9),
width=swatch_width,
height=18, facecolor=colors[name],
edgecolor='0.7')
)
return fig
plot_colortable(mcolors.BASE_COLORS,
ncols=5, sort_colors=False)
plot_colortable(mcolors.CSS4_COLORS)
plt.show()
В результате выполнения кода получим список основных цветов
и цветов CSS.
Основные цвета представлены на рис. 2.1, остальные цвета – на
рис. 2.2.
Рис. 2.1. Базовые цвета
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
