Streamlit中Pandas DataFrame行高样式不生效问题排查求助
问题分析与解决方案
你的问题主要由代码错误和Streamlit的样式支持限制共同导致,具体如下:
一、代码层面的明显错误
- 变量名混淆:
null_row函数返回时误用了未定义的color变量,实际应该用你定义的size变量 - 语法与格式错误:赋值语句写法违规,且CSS单位未加引号(需字符串格式),同时函数调用时名称不匹配
- 函数引用错误:定义的行高函数是
null_row,但apply时写的是height,名称完全不对应
修正后的代码:
def resistance(s): color = '#fcdcdc' if s.interpretation == 'Resistant' else '' return ['background-color: {}'.format(color)]*len(s) def null_row(s): # 修正赋值语法,给CSS单位加引号 size = '1px' if s.interpretation == '' else '12px' # 修正变量名,用size替代color return ['line-height: {}'.format(size)]*len(s) # 修正函数引用,用null_row替代height df_style = df.style.\ apply(resistance, axis=1).\ apply(null_row, axis=1) st.dataframe(df_style)
二、Streamlit的样式支持限制
即使修正代码,line-height仍可能无法生效——因为Streamlit的st.table和st.dataframe对Pandas Styler的CSS属性支持并不完全,很多自定义样式会被框架过滤或覆盖。
如果需要实现行高自定义,建议:
- 对于
st.dataframe,尝试通过st.markdown注入自定义CSS的方式强制修改行高(针对表格DOM元素) - 若只是想压缩空行,更简单可靠的方式是直接在DataFrame层面过滤掉空行后再渲染
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

