看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 提供了几个非常常用的内置样式,是我们经常要使用的,本文将对这些提高计数效率的样式功能进行介绍。
对为空的值,高亮标示。
df.iloc[1,1] = np.NaN # 修改一个值空
df.head().style.highlight_null() # 默认红色
可以指定颜色:
# 使用颜色名
df.head().style.highlight_null(null_color='blue')
# 使用颜色值
df.head().style.highlight_null(null_color='#ccc')
也可以指定 CSS 属性样式,不过此时,null_color 就不能同时定义,会不起作用(1.3.0 版本+):
df.style.highlight_null(props=['background-color: yellow; font-size: 1.5em;'])
df.style.highlight_null(props='font-size: 1.5em;')
# 最大值高亮,默认黄色
df.head().style.highlight_max()
# 最小值高亮
df.head().style.highlight_min()
# 同时使用+指定颜色
(df.head()
.style.highlight_max(color='lime') # 最大值高亮
.highlight_min() # 最小值
)
以上在在一列中的最大和最小,也可以指定在行上的最大和最小:
# 指定行级
(df.head()
.style.highlight_max(color='lime', axis=1) # 最大值高亮, 绿色
.highlight_min(axis=1) # 最小值,黄色
)
也可以作用于指定行:
# 只对 Q1 起作用
df.style.highlight_min(subset=['Q1'])
df.style.highlight_min(subset=['Q1', 'Q2']) # 两列
# 使用 pd.IndexSlice 索引器(和 loc[] 类似)
# 注意,数据是所有数据,算最小值的范围不是全部
df.style.highlight_min(subset=pd.IndexSlice[:10, ['Q1', 'Q3']])
# 按行,只在这两列进行
df.style.highlight_min(axis=1, subset=['Q1','Q2'])
也可以指定 CSS 属性样式,不过此时,color 就不能同时定义,会不起作用(1.3.0 版本+):
df.style.highlight_max(props=['background-color: yellow; font-size: 1.5em;'])
df.style.highlight_min(props='font-size: 1.5em;')
对指定区间的值进行高亮标注显示,可以是数字,也可以是时间(1.3.0 版本+):
# Q4 列的 60 到 100 高亮
df.style.highlight_between(left=60, right=100, subset=['Q4'])
# axis=None 并将 left 参数作为与输入数据帧匹配的数组提供,常量 right
df.style.highlight_between(left=[[2,2,3],[2,2,3],[3,3,3]], right=3.5,
axis=None, color="#fffd75")
# 指定 css 样式
df.style.highlight_between(left=1.5, right=3.5,
props='font-weight:bold;color:#e83e8c')
如果 left 为None,则仅应用右边界。如果 right 为 None,则仅应用左边界。如果两者均为 None,则所有值均高亮显示。
仅当左或右作为序列或类似阵列的对象提供用于对齐形状时,才需要轴。如果左和右都是标量,则所有轴输入将给出相同的结果。
此函数仅适用于兼容的数据类型。例如,类似 datetime 的区域只能使用等效的类似datetime 的左参数和右参数。使用子集控制具有多个数据类型的区域。
使用样式高亮显示分位数定义的值(1.3.0 版本+),就是说把指定分位区间的数据高亮。使用 axis=None 对所有集合数据应用分位数。
df = pd.DataFrame(np.arange(10).reshape(2,5) + 1)
# 将后四分位的数据高亮,即后 3/4 的数据
df.style.highlight_quantile(axis=None, q_left=0.25, color="#fffd75")
# 按行或按列高亮显示分位数,在本例中按行高亮显示
df.style.highlight_quantile(axis=1, q_left=0.8, color="#fffd75")
# 使用 props 而不是默认的背景颜色
df.style.highlight_quantile(axis=None, q_left=0.2, q_right=0.8,
props='font-weight:bold;color:#e83e8c')
以渐变样式为文本着色。文本颜色根据每列、每行或每帧中的数据或给定的渐变图谱确定。依赖 matplotlib。
语法是:
Styler.text_gradient(cmap='PuBu', low=0, high=0,
axis=0, subset=None,
vmin=None, vmax=None,
gmap=None)
示例如下:
# 数据集
df = pd.DataFrame(columns=["City", "Temp (c)", "Rain (mm)", "Wind (m/s)"],
data=[["Stockholm", 21.6, 5.0, 3.2],
["Oslo", 22.4, 13.3, 3.1],
["Copenhagen", 24.5, 0.0, 6.7]])
# 按列着色显示值,axis=0,预选数值列
df.style.text_gradient(axis=0)
# 使用 axis=None 对所有值进行整体着色
df.style.text_gradient(axis=None)
# 从低值和高值颜色着色
df.style.text_gradient(axis=None, low=0.75, high=1.0)
# 手动设置vmin和vmax梯度阈值
df.style.text_gradient(axis=None, vmin=6.7, vmax=21.6)
# 设置 gmap 并使用另一个 cmap 应用于所有列
df.style.text_gradient(axis=0, gmap=df['Temp (c)'], cmap='YlOrRd')
# 设置数据帧的渐变贴图(即axis=None),我们需要
# 显式地声明子集以匹配 gmap 形状
gmap = np.array([[1,2,3], [2,3,4], [3,4,5]])
df.style.text_gradient(axis=None, gmap=gmap,
cmap='YlOrRd', subset=['Temp (c)', 'Rain (mm)', 'Wind (m/s)']
)
根据数值的大小背景颜色呈现梯度渐变,越深表示越大,越浅表示越小,类似于 Excel 的中的色阶样式。颜色指定为 Matplotlib 库的色系表(Matplotlib colormap)中的色系名, 点击查看所有色表。
# 数字类型按列背景渐变
df.style.background_gradient()
# 指定列,指定颜色系列
df.style.background_gradient(subset=['Q1'], cmap='BuGn')
# 低百分比和高百分比范围, 更换颜色时避免使用所有色域
df.style.background_gradient(low=0.6, high=0)
# 内容的颜色,取 0-1(深色到浅色),方便突显出文本
df.style.background_gradient(text_color_threshold=0.5)
# 颜色应用的取值范围,不在这个范围的不应用
df.style.background_gradient(vmin=60, vmax=100)
以下是一个综合使用示例:
# 链式方法使用样式
(df.head(15)
.style
.background_gradient(subset=['Q1'], cmap='spring') # 指定色系
.background_gradient(subset=['Q2'], vmin=60, vmax=100) # 指定应用值区间
.background_gradient(subset=['Q3'], low=0.6, high=0) # 高低百分比范围
.background_gradient(subset=['Q4'], text_color_threshold=0.9) # 文本色深
)
条形图在表格里一般以横向柱状图的形式代表这个值的大小。
# 基本使用,默认将数字应用
df.style.bar()
# 指定应用范围
df.style.bar(subset=['Q1'])
# 定义颜色
df.style.bar(color='green')
df.style.bar(color='#ff11bb')
# 以向进行计算展示
df.style.bar(axis=1)
# 样式在格中的占位百分比,0-100, 100占满
df.style.bar(width=80)
# 对齐方式:
# ‘left’ 最小值开始,
# ‘zero’ 0值在中间,
# ’mid’ (max-min)/2 值在中间,负(正)值0在右(左)
df.style.bar(align='mid')
# 大小基准值
df.style.bar(vmin=60, vmax=100)
以下是一个综合示例:
(df.head(10)
.assign(avg=df.mean(axis=1, numeric_only=True)) # 增加平均值
.assign(diff=lambda x: x.avg.diff()) # 和前位同学差值
.style
.bar(color='yellow', subset=['Q1'])
.bar(subset=['avg'],
width=90,
align='mid',
vmin=60, vmax=100,
color='#5CADAD')
.bar(subset=['diff'],
color=['#ffe4e4','#bbf9ce'], # 上涨下降的颜色
vmin=0, vmax=30, # 范围定以0为基准的上下30
align='zero') # 0 值居中
)
更新时间:2021-08-06 00:25:51 标签:pandas 样式