pandas样式制定
样式制定是指对DataFrame
的显示样式的调整, 显示样式主要是对表格本身的调整.
比如颜色, 通过颜色可以突出显示重要的值, 观察数据时可以更加高效的获取主要信息.
下面介绍一些针对单个数据和批量数据的样式调整方式, 让DataFrame
的数据信息更加的一目了然. (¯﹃¯)
# 多列显示格式
调整数值的显示样式, 需求:
1> 日期格式改成用 /
来分割.
2> 单价前加了人民币符号, 并且用逗号作为千位分隔符.
3> 数量用逗号作为千位分隔符, 加了单位 件.
示例代码如下: (没有更改源df的数据哦,只是展示的样式变了下. emmm.
调整之后, 表格中的内容放入报告中会更加美观.
import pandas as pd
df = pd.DataFrame(
{
"日期": ["2022-10-01", "2022-11-11",
"2022-12-12", "2023-01-01", "2023-02-02"],
"单价": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
"数量": [1, 3, 1200, 4, 5],
}
)
df["日期"] = pd.to_datetime(df["日期"])
df
col_format = {
"日期": "{:%Y/%m/%d}",
"单价": "¥{:,.2f}",
"数量": "{:,} 件"
}
df.style.format(col_format)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 背景色样式
我们可以调整单元格的颜色.
需求: 我们先计算出总价, 然后用红色背景标记出总价最小的订单, 用绿色背景标记出总价最大的订单.
highlight_min和highlight_max函数的重要参数:
-1- subset
: 指定作用范围 (子集).
-2- color
: 指定最小值的高亮颜色. 类型为字符串, 默认为黄色.
-3- axis
: 轴方向, 即设置最小值的比较范围. 默认值为 0
即按列方向比较, 1
为按行方向比较.
示例代码如下:
import pandas as pd
df = pd.DataFrame(
{
"订单号": ["0001", "0002", "0003", "0004", "0005"],
"单价": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
"数量": [1, 3, 1200, 4, 5],
}
)
df["总价"] = df["单价"] * df["数量"]
df
col_format = {
"单价": "¥{:,.2f}",
"总价": "¥{:,.2f}",
}
df.style.format(col_format).highlight_min(
"总价", color="lightgreen"
).highlight_max(
"总价", color="red"
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 渐变色样式
添加背景色之后, 只能看出哪个订单总价最高, 哪个订单总价最低.
对于其他的订单, 没有直观的印象, 所以, 下面我们更进一步用渐变色来标记 总价 列.
(・_・; 总价越高, 背景色越深, 这样就对所有订单的总价有了直观的印象.
示例代码如下:
import pandas as pd
df = pd.DataFrame(
{
"订单号": ["0001", "0002", "0003", "0004", "0005"],
"单价": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
"数量": [1, 3, 1200, 4, 5],
}
)
df["总价"] = df["单价"] * df["数量"]
df
col_format = {
"单价": "¥{:,.2f}",
"总价": "¥{:,.2f}",
}
df.style.format(
col_format
).background_gradient(
subset="总价", cmap="Greens", axis=0
)
# 数值越大颜色越深
# cmap为颜色映射,可选值有Wistia、viridis、plasma、inferno、magma、cool、hot等预定义颜色.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
background_gradient方法的参数为(了解即可):
- cmap: Matplotlib颜色映射(colormap). 类型为字符串或 colormap, 默认值为’PuBu’
- low: 最小颜色范围. 类型为浮点值. 默认为0.
- high: 最大颜色范围. 类型为浮点值. 默认为0.
- axis: 轴方向,即设置值的比较范围. 默认值为0.即按列方向比较,1为按行方向比较.
- subset: 指定作用范围(子集).
- text_color_threshold: 文本的亮度阈值,用于辅助文本在不同背景色下的显示.
类型为浮点值或整数,取值范围为0-1,0为全部文本都为暗色,1为全部文本都为亮色.
- vmin: colormap中的最小值. 类型为浮点数,默认值为数据中的最小值.
- vmax: colormap中的最大值. 类型为浮点数,默认值为数据中的最大值.
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 条形图样式
再进一步, 用条形图+渐变色的方式显示 总价 信息. 这样, 不仅可以看出总价的高低, 还能大致看出究竟高了多少.
示例代码如下:
import pandas as pd
df = pd.DataFrame(
{
"订单号": ["0001", "0002", "0003", "0004", "0005"],
"单价": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
"数量": [1, 3, 1200, 4, 5],
}
)
df["总价"] = df["单价"] * df["数量"]
df
col_format = {
"单价": "¥{:,.2f}",
"总价": "¥{:,.2f}",
}
df.style.format(
col_format
).bar(
subset="总价", cmap="Wistia"
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bar方法的参数介绍(了解即可)
- width: 最大值占单元格宽度的百分比. 类型为浮点值, 取值范围为0-100. 默认为100.
- axis: 轴方向.即设置数据条的比较范围. 默认值为0即按列方向比较,1为按行方向比较.
- subset:指定作用范围(子集).
- align: 数据条的对齐方式.取值范围为{'left', 'zero',' mid'}.默认值为'left'.
- 'left' : 最小值位于单元格的左侧.
- 'zero' : 0值位于单元格的中央.
- 'mid' : (max-min)/2值位于单元格的中央. 如果所有值均为正值,0值位于单元格左侧; 如果所有值均为负值,0值位于单元格右侧.
- vmin : 数据条(左侧)最小值. 类型为浮点数,默认值为数据中的最小值.
- vmax : 数据条(右侧)最大值. 类型为浮点数,默认值为数据中的最大值.
- cmap : 颜色映射
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10