看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析中,通过颜色的变化,可以直观地了解数据的变化趋势,有助于发现数据中的异常或者重要变化。pandas 样式功能使得你可以以更直观和更富有吸引力的方式呈现数据,进而更好地理解和分析数据。本例我们来看一个通过样式来观察数据变化情况的 pandas 案例。
为了方便讲解,我们先构造数据:
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, size=[3, 5]),
columns=[*'abcde'])
df
'''
a b c d e
0 3 3 7 2 4
1 7 2 1 2 1
2 1 4 5 1 1
'''
我们需要从左往右来观察数据的变化,如果每行数据中,每个数据右边的数字相对于左边的数字增加了就背景就设置为红色,如果减小了就设置为绿色,如果相等则保持不变。
具体期望效果可看页后的图片。
由于要通过背景颜色来观察数据的变化,我们就涉及到应用 pandas 的样式功能,首先先构造一个相同形状的 DataFrame 做为样式遮罩,每个位置的的数据是 css 样式,即表示背景颜色。
在构造样式遮罩时,我们可以先对原数据进行向右求位差值,然后通过判断正负来了解数据的变大变小。
然后,再将这个样式遮罩应用到原数据的样式对象上,就显示出了最终的效果。
先定义一个函数来处理数据根据正负显示背景样式代码的逻辑,并每个值应用这个函数:
def func(v):
if v > 0:
return 'background-color: red'
elif v < 0:
return 'background-color: green'
else:
return ''
style = (
df.diff(periods=1, axis=1).fillna(0)
.map(func)
)
style
# 部分输出内容
'''
a b c ...
1 background-color: green background-color: green ...
2 background-color: red background-color: red ...
...
'''
然后应用这个样式代码 DataFrame:
df.style.apply(lambda _: style, axis=None)
最终在 Jupyter 的显示效果如:
这样就完成了需求。
(完)
更新时间:2024-08-18 16:22:11 标签:pandas python 样式 背景色