You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit的st.dataframe()/st.table()中隐藏<NA>(NaN)值?

解决Streamlit中DataFrame的显示问题

当使用st.dataframe()或st.table()展示Pandas DataFrame时,NaN值会显示为<NA>,以下几种方法可以隐藏这些值,同时保留上下文行、保持数值右对齐并固定精度:

方案一:使用Pandas Styler自定义显示格式(推荐)

这种方法无需修改原始DataFrame的数值类型,通过Styler自定义单元格显示规则,既实现NaN为空显示,又能固定数值精度,且数值自动右对齐。

import pandas as pd
import streamlit as st

df = pd.read_csv("nlp_metrics_v2.csv", header=0)

# 定义格式化规则:数值保留两位小数,NaN显示为空
def format_cell(val):
    if pd.isna(val):
        return ""
    elif isinstance(val, (int, float)):
        return f"{val:.2f}"
    return val

# 应用样式到DataFrame
styled_df = df.style.format(format_cell)

st.dataframe(styled_df)

方案二:替换NaN为空字符串并格式化数值

如果接受将数值转为字符串,可直接对数值列格式化后替换NaN为空,实现空单元格效果。

import pandas as pd
import streamlit as st

df = pd.read_csv("nlp_metrics_v2.csv", header=0)

# 筛选数值列,保留两位小数后转为字符串,NaN替换为空
numeric_cols = df.select_dtypes(include=[float, int]).columns
df[numeric_cols] = df[numeric_cols].applymap(lambda x: f"{x:.2f}" if not pd.isna(x) else "")

# 替换剩余的非数值列NaN为空
df = df.fillna("")

st.dataframe(df)

方案三:通过自定义CSS隐藏文本

无需修改DataFrame结构,利用Streamlit的自定义CSS隐藏表格中的<NA>文本,同时保留数值的原始类型和格式。

import pandas as pd
import streamlit as st

# 注入自定义CSS,隐藏包含<NA>的单元格文本
st.markdown("""
<style>
[data-testid="stDataFrame"] .row-cell div:contains("<NA>") {
    visibility: hidden;
}
</style>
""", unsafe_allow_html=True)

df = pd.read_csv("nlp_metrics_v2.csv", header=0)

# 对数值列保留两位小数
numeric_cols = df.select_dtypes(include=[float, int]).columns
df[numeric_cols] = df[numeric_cols].round(2)

st.dataframe(df)

说明

  • 三种方案均不会删除上下文行,仅隐藏NaN的显示内容;
  • 方案一和方案三可保留数值类型,适合后续仍需使用数据计算的场景;
  • 方案二实现简单,但数值会转为字符串,仅适合纯展示需求。

内容的提问来源于stack exchange,提问作者Joel Sullivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:54:15