Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
В этой статье в основном рассказывается, как украсить данные Pandas DataFrame. В основном с помощью двух методов в Pandas:
- Styler.applymap: поэлементно, возвращается с помощью CSSстоимость имуществаодна строка пар
- Styler.apply: Column, Table, Rows возвращает серию или кадр данных той же формы, где каждое значение представляет собой строку с парой значений свойства CSS. Когда этот метод работает, он передается через параметр ось, ось = 0 означает, что он работает по столбцу, а ось = 1 означает, что он работает по строке.
Адрес официального сайта обучения:
Сериализация панд
Статья Pandas была сериализована:
Данные моделирования
import pandas as pd
import numpy as np
# 设置随机种子,保证每次运行结果相同
np.random.seed(20)
# 模拟数据
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
# 将两个DataFrame进行合并
df1 = pd.concat([df, pd.DataFrame(np.random.randn(10,4), columns=list("BCDE"))],axis=1)
df1
в пустом видеlinspace(start,stop,setp)
: Указывает, что число берется в соответствии с размером шага, включая данные головы и хвоста:
Чтобы увидеть эффект нулевых значений, 3 нулевые значения NAN сознательно устанавливаются:
Просмотр и скрытие стилей
Во-первых, посмотрите на стиль DataFrame:
Мы можем просмотреть конкретное значение стиля фрейма данных с помощью метода рендеринга:Обнаружено, что код является стилем CSS по умолчанию.
скрыть индекс
Код для скрытия индекса:
Скрыть указанный столбец
Мы обнаружили, что два столбца AC были скрыты, используя параметр подмножества параметров:
Ниже приведены примеры различных стилей отображения:
Случай 1: положительные и отрицательные цвета
Меньше 0 показывает красный, больше 0 показывает синий
def color_change(val):
color = 'red' if val < 0 else 'blue'
return 'color: %s' % color
# 使用applymap并调用写好的函数
df1.style.applymap(color_change)
Метод applymap предназначен для всего DataFrame.
Случай 2: выделение данных
Максимальные, минимальные и отсутствующие значения могут быть выделены. Напишите простую функцию выделения вручную:
def highlight_min(x):
is_min = x == x.min()
return ["background-color: yellow" if v else '' for v in is_min]
Пример 3: Использование функции выделения по умолчанию
В Pandas по умолчанию написаны три встроенные функции подсветки:
- highlight_max(): максимум
- highlight_min(): минимум
- highlight_null(): нулевое значение
В то же время мы также можем использовать ось параметров для отображения строк или столбцов.
1. Выделите максимальное значение
2. Выделите минимальное значение каждого столбца
3. Выделите пустое значение: по умолчанию оно красного цвета.
Конечно, мы можем изменить цвет, используя параметр null_color:
Используйте параметр axis=1 для работы в направлении линии:
Случай 4: последовательные вызовы
Цепочка означает одновременное использование нескольких функций (методов) в одном и том же стиле операции:
# color_change + highlight_max
df1.style.applymap(color_change).apply(highlight_min)
Если методов слишком много, можно написать отдельными строками:
# color_change + highlight_max
df1.style.\
applymap(color_change).\
apply(highlight_min)
# 或者:外面再加层括号,表示整个代码是一个整体
(df1.style.
applymap(color_change).
apply(highlight_min))
Подсветка нулевого значения и изменение цветовых параметров используются одновременно для достижения цепочек вызовов:
Одновременно используются скрытые свойства столбца и пользовательские параметры:
Пример 5: Частичное украшение данных
Используйте параметр подмножества параметров для управления строкой и столбцом эффекта.Входящий параметр может быть:
- метки столбцов
- список (пустой массив)
- кортеж (индексатор_строки, индексатор_столбца)
Некоторые свойства столбца
Укажите атрибуты столбца, которые мы хотим украсить, с помощью подмножества параметров:
pd.IndexSlice создает список
Создан pd.IndexSlice
Пример 6: Форматированное отображение значений (Styler.format)
Styler.format для управления форматированным выводом числовых значений, аналогично форматированию строк в Python.
Общий дисплей
Например, мы хотим, чтобы все данные отображали только два десятичных знака:
Используя словарь, отформатируйте определенные столбцы
В виде словаря,Имя атрибута столбца используется в качестве ключа, а спецификация формата используется в качестве значения., сделайте настройки форматирования:
Использовать анонимную лямбда-функцию
отображение пустого значения
Через параметр na_rep заменяется нулевое значение:
Вместо этого используйте слово «null»:
Цепные вызовы также используют «-» вместо этого:
эмодзи
Используйте смайлики:
Пример 7: Встроенные стили
встроенная функция
Здесь используется встроенная функция выделения нулей:
Создание тепловой карты
Мы используем библиотеку seaborn для достижения:
import seaborn as sns
cm = sns.light_palette("blue", as_cmap=True)
s = df1.style.background_gradient(cmap=cm)
s
непрерывная хроматография
Диапазон цветового спектра задается параметрами low и high:
set_properties использовать
### set_properties使用
df1.style.set_properties(**{"background":"yellow", # 背景色
"color":"red", # 字体
"border-color":"black"}) # 边界
Пример 8: Персонализированная гистограмма
Способ по умолчанию
Действуйте через барный метод:
выравнивание параметров
Есть 3 выравнивания:
- слева: минимальное значение начинается с левой стороны ячейки
- ноль: нулевое значение находится в центре ячейки
- mid: центр ячейки находится в точке (max-min)/2
Пример 9: Совместное использование стилей
Предположим, мы создаем стиль в одном DataFrame, а затем хотим использовать этот стиль непосредственно в другом DataFrame, как это сделать?
Сначала мы создаем стиль style1:
Примените стиль1 к стилю2:
Пример 10: Установите точность set_precision
Обычно для данных во фрейме данных указывается точность (количество знаков после запятой):
Пример 11: Установка заголовка
Используйте метод set_caption
Настройки отсутствующих значений
Используется функция set_na_rep:
(df1.style.set_na_rep("FAIL")
.format(None, na_rep="PASS", subset=["D"])
.highlight_null("yellow"))
Пример 13: Комплексный случай
(df1.style
.set_na_rep('-') # 设置空值
.format({'C':'{:.4f}', # 精度设置
'D':'{:.4f}',
'E':'{:.2%}'},na_rep="-") # 精度和空值同时设置
.highlight_null("green") # 空值高亮
.applymap(color_change,subset=['D']) # D列使用color_change函数
.apply(highlight_min,subset=['C']) # C列使用highlight_min
.background_gradient(cmap='cubehelix',subset=['B','D']) # 背景色设置
.bar(subset=['E'], align='mid', color=['#60BCD4','#6A1B9A']) # 柱状图设置
.set_caption("Title of Pandas Style") # 标题设置
.hide_index() # 隐藏索引
.hide_columns(subset=['A'])) # 隐藏A列
Пример 14: Абсолютное оружие
# 版本至少需要pandas1.2.0
style1 = [
dict(selector="th", props=[("font-size", "125%"),
("text-align", "center"),
("background-color", "#F0F3CF"),
('width',"100px"),
('height','80px')]),
dict(selector="td", props=[("font-size", "105%"),
("text-align", "right"),
('width',"150px"),
('height','50px')]),
dict(selector="caption", props=[("caption-side", "top"),
("font-size","150%"),
("font-weight","bold"),
("text-align", "left"),
('height','50px'),
('color','#E74C3C')])]
style2 = {
'A': [dict(selector='td', props=[('text-align','center'),
("font-weight","bold"),
("text-transform","capitalize")])],
'B': [dict(selector='td', props=[('text-align','left'),
("font-style","italic")])],
'C': [dict(selector='td', props=[('text-decoration','underline'),
('text-decoration-color','red'),
('text-decoration-style','wavy')])]}
# 链式调用各种设置方法
(df1.style
.set_na_rep('-') # 整体空值
.format({'C':'{:.4f}','D':'{:.4f}','E':'{:.2%}'},na_rep="-") # 精度
.highlight_null("gray") # 高亮空值
.applymap(color_change,subset=['B']).highlight_max(subset=['A']) # color_change函数和最大值高亮
.background_gradient(cmap='Pastel1',subset=['C','D']) # 背景
.bar(subset=['E'], align='mid', color=['#90BCD4','#6A1B9A']) # 柱状
.set_caption("Advanced use of Pandas Style") # 标题
.hide_index() # 隐藏索引
.hide_columns(subset=['E']) # 隐藏E列
.set_table_styles(style1).set_table_styles(style2,overwrite=False) # 样式传递
.set_properties(**{'font-family': 'Microsoft Yahei','border-collapse': 'collapse', # 属性设置
'border-top': '1px solid black','border-bottom': '1px solid black'}))
Экспорт в Excel
Это функция, которая все еще находится в стадии разработки.DataFrame экспортируется в Excel с использованием openyxl или xlswriter в качестве движка.На официальном сайте говорится следующее:
См. простой случай здесь:
(df1.style
.applymap(color_change) # 正负改变颜色
.apply(highlight_min) # 高亮最小值
.to_excel('styled.xlsx', engine='openpyxl'))
Если нам не нужен номер индекса, добавьте index=False:
(df1.style
.applymap(color_change) # 正负改变颜色
.apply(highlight_min) # 高亮最小值
.to_excel('styled.xlsx', engine='openpyxl', index=False))