Советы по красоте стола Pandas

pandas
Советы по красоте стола Pandas

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

В этой статье в основном рассказывается, как украсить данные Pandas DataFrame. В основном с помощью двух методов в Pandas:

  1. Styler.applymap: поэлементно, возвращается с помощью CSSстоимость имуществаодна строка пар
  2. 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))