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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
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, preci­sion=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, hyper­links=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. Базовые цвета
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]