python - 熊猫 style.background_gradient 忽略 NaN
问题描述
我有以下代码将数据框转储到 HTML 中的表中,以便根据 seaborn 的颜色图对results
其中的列进行着色。TIME_FRAMES
import seaborn as sns
TIME_FRAMES = ["24h", "7d", "30d", "1y"]
# Set CSS properties for th elements in dataframe
th_props = [
('font-size', '11px'),
('text-align', 'center'),
('font-weight', 'bold'),
('color', '#6d6d6d'),
('background-color', '#f7f7f9')
]
# Set CSS properties for td elements in dataframe
td_props = [
('font-size', '11px')
]
cm = sns.light_palette("green", as_cmap=True)
s = (results.style.background_gradient(cmap=cm, subset=TIME_FRAMES)
.set_table_styles(styles))
a = s.render()
with open("test.html", "w") as f:
f.write(a)
由此,我得到警告:
/python3.7/site-packages/matplotlib/colors.py:512:RuntimeWarning:在 less xa[xa < 0] = -1 中遇到无效值
而且,正如您在下图中看到的那样,列30d
并1y
没有正确呈现,因为它们有 NaN。我怎样才能做到这一点,以便忽略 NaN 并且仅使用有效值呈现颜色?将 NaN 设置为 0 不是一个有效的选项,因为这里的 NaN 本身就有意义。
解决方案
有点晚了,但供将来参考。
我有同样的问题,这是我解决它的方法:
import pandas as pd
import numpy as np
dt = pd.DataFrame({'col1': [1,2,3,4,5], 'col2': [4,5,6,7,np.nan], 'col3': [8,2,6,np.nan,np.nan]})
先填写数值大的nas
dt.fillna(dt.max().max()+1, inplace=True)
将此最大值的字体着色为白色的函数
def color_max_white(val, max_val):
color = 'white' if val == max_val else 'black'
return 'color: %s' % color
将最大值的背景着色为白色的函数
def highlight_max(data, color='white'):
attr = 'background-color: {}'.format(color)
if data.ndim == 1: # Series from .apply(axis=0) or axis=1
is_max = data == data.max()
return [attr if v else '' for v in is_max]
else: # from .apply(axis=None)
is_max = data == data.max().max()
return pd.DataFrame(np.where(is_max, attr, ''),
index=data.index, columns=data.columns)
把所有东西放在一起
max_val = dt.max().max()
dt.style.format("{:.2f}").background_gradient(cmap='Blues', axis=None).applymap(lambda x: color_max_white(x, max_val)).apply(highlight_max, axis=None)
这个链接帮助我回答了
推荐阅读
- php - 有没有办法按照一定的标准将最多 3 个多维数组与 OOP PHP 对象组合成一个数组?
- curl - Linuxbrew curl证书问题
- r - R Highcharter - 共享工具提示(和各种工具提示参数)不起作用
- json - 使用正则表达式解析 Git Json
- javascript - 寻找合适的代码架构来嵌入音频,同时防止页面更新闪烁(HTML/javascript/Ajax)
- css - 网格列表向左浮动
- c# - 通过引用传递 DataGridViewCell
- gcc - 为什么我的内联汇编代码会导致三重错误?
- r - 在 tsCV 中循环预测函数
- python - 在 Python 函数调用中创建生成器 - 为什么会这样?