0. 样式创建:

Styler.applymap:elementwise → 按元素方式处理Dataframe
Styler.apply:column- / row- / table-wise → 按行/列处理Dataframe

前期准备,导入相关的库和加载数据(编程环境jupyter notebook)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10,4),columns=['a','b','c','d'])
sty = df.style
print(sty)
print(type(sty))

–> 输出的结果为:

<pandas.formats.style.Styler object at 0x0000000009789CF8> 
<class 'pandas.formats.style.Styler'>
1. 按元素处理样式

style.applymap(),括号内可以加入自定义的函数

def color_neg_red(val):
    if val < 0:
        color = 'red'
    else:
        color = 'black'
    return(f'color:{color}')
df.style.applymap(color_neg_red)

–> 输出的结果为:(负数显示红色,正数显示黑色)
在这里插入图片描述

2. 按行/列处理样式

style.apply(),这个和之前的对列表字段的数据处理类似

def highlight_max(s):
    is_max = s == s.max()
    #print(is_max)
    lst = []
    for v in is_max:
        if v:
            lst.append('background-color: yellow')
        else:
            lst.append('')
    return(lst)
df.style.apply(highlight_max, axis = 0, subset = ['b','c'])

–> 输出的结果为:(每列最大值填充黄色,行列的操作的话就要是列表数据)
在这里插入图片描述

3. 索引/切片样式修改
df.style.apply(highlight_max, axis = 1, 
               subset = pd.IndexSlice[2:5,['b', 'd']])

#也可先索引行再做样式:
#df[2:5].style.apply(highlight_max, subset = ['b', 'd'])

–> 输出的结果为:(核心的要点就是如何筛选DataFrame表格中的指定的区域表格:pd.IndexSlice[2:5,['b', 'd']]
在这里插入图片描述

★★★★★ 4. 表格格式处理

df.style.format() 类似之前的字符串的格式化输出显示

1) 百分数显示

df = pd.DataFrame(np.random.randn(10,4),columns=['a','b','c','d'])
df.head().style.format("{:.2%}")

–> 输出的结果为:
在这里插入图片描述
2) 小数点数显示

df.head().style.format("{:.4f}")

–> 输出的结果为:
在这里插入图片描述
3) 正负数显示

df.head().style.format("{:+.2f}")

–> 输出的结果为:
在这里插入图片描述
4) 分列进行格式显示

df.head().style.format({'b':"{:.2%}", 'c':"{:+.3f}", 'd':"{:.3f}"})

–> 输出的结果为:
在这里插入图片描述

5. 表格样式调用

Styler内置样式调用

1) 定位空值

df = pd.DataFrame(np.random.rand(5,4),columns = list('ABCD'))
df['A'][2] = np.nan
df.style.highlight_null(null_color='red')

–> 输出的结果为:
在这里插入图片描述
2) 色彩映射(渐变)

df = pd.DataFrame(np.random.rand(10,4),columns = list('ABCD'))
df.style.background_gradient(cmap='Greens',axis =1,low=0,high=1)

–> 输出的结果为:(注意axis轴参数的使用)
在这里插入图片描述
3) 条形图

df = pd.DataFrame(np.random.rand(10,4),columns = list('ABCD'))
df.style.bar(subset=['A', 'B'], color='#d65f5f', width=100)

–> 输出的结果为:(width:最长长度在格子的占比)
在这里插入图片描述
4) 分段式构建样式

df = pd.DataFrame(np.random.rand(10,4),columns = list('ABCD'))
df['A'][[2,3]] = np.nan
df.style.\
    bar(subset=['A', 'B'], color='#d65f5f', width=100).\
    highlight_null(null_color='yellow')

–> 输出的结果为:(样式之间可以相互补充)
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐