在streamlit中对Pandas数据框架进行样式化



我希望基于两个函数创建自己的样式条件:我想要一个背景颜色和大小row_height。

为此我定义了2个样式函数

def resistance(s):
color='#fcdcdc' if s.interpretation=='Resistant' else ''
return ['background-color: {}'.format(color)]*len(s)
def null_row(s):
size=1px if s.interpretation=='' else size=12px
return ['line-height: {}'.format(color)]*len(s)
df_style=df.style.
apply(resistance,axis=1).
apply(height,axis=1)

st.table(df_style)
st.dataframe(df_style)

除了line_height从来没有改变空行,似乎不工作(没有错误消息)。同样的,当我采取一个任意的非空条件或尝试大小每一行的高度1px

这是一个问题与流光或与我的代码?

Thanks for help

根据pd.style的文档。应用时,样式函数需要返回实际数据,而不仅仅是格式化指令。

function - function

函数应该接受一个Series if轴在[0,1]内,并返回一个相同长度的类列表对象,或者一个Series,不一定相同长度;具有考虑子集的有效索引标签。Func应该取a如果axis为None,则返回一个具有相同属性的数组shape或DataFrame,不一定具有相同的形状,具有valid考虑子集的索引和列标签

示例代码如下:

def highlight_max(x, color):
return np.where(x == np.nanmax(x.to_numpy()), f"color: {color};", None)
df = pd.DataFrame(np.random.randn(5, 2), columns=["A", "B"])
df.style.apply(highlight_max, color='red')  
df.style.apply(highlight_max, color='blue', axis=1)  
df.style.apply(highlight_max, color='green', axis=None) 

你需要使你的函数适应你想要达到的目的,并返回你真正想要格式化的数据。

正确使用的属性是height而不是line-height

您的null_row函数的名称与您正在调用的名称不同:height

不幸的是,处理整个行要困难得多,而且Streamlit也不尊重所有的CSS样式参数(参见隐藏索引主题)。因此,我不确定是否可以将行高度设置为1px。从显示的数据框中删除该行是否可行?你可以用df[df["interpretation"] == ""]

如果我正确理解了你想要做的事情,这应该是正确的代码:

def resistance(x, color):
return np.where(x=='Resistant', f"background-color: {color};", None)
def null_row(x):
return np.where(x=='', "height: 12px;", "height: 1px;")
df = pd.DataFrame(columns=["interpretation"], data=[[""], ["Resistant"], [""], ["Resistant"]])
df_style = df.style.apply(resistance, color='#fcdcdc').apply(null_row)

st.table(df_style)

相关内容

  • 没有找到相关文章

最新更新