When I display a Pandas DataFrame in Streamlit, using st.dataframe() or st.table(), NaN values show up as the text <NA>. I would like to hide them.
# table.py
import pandas as pd
import streamlit as st
df = pd.read_csv("nlp_metrics_v2.csv", header=0)
st.dataframe(df)
# nlp_metrics_v2.csv
Model,NLP Model,NLP Prime,YOLO-NLP
Average Rouge 1,,,
F1 Score,0.5,0.7,0.3
Precision,0.5,0.2,0.5
Recall,0.7,0.32,0.32
Average Rouge 2,,,
F1 Score,0.4,0.3,0.5
Precision,0.7,0.46,0.33
Recall,0.6,0.7,0.5
Average Rouge L,,,
F1 Score,0.8,0.45,0.5
Precision,0.7,0.5,0.25
Recall,0.1,0.8,0.25
# Command line
streamlit run table.py

Hide the cells that contain <NA>, without hiding those rows since they give context about other rows. Any approach that lets me keep the values right-aligned with fixed precision (e.g., 2 decimal places) would be fine. (Ideally I'd like to do this without converting the values in those columns into strings, but that's not a hard requirement.)
I'm aware I'm not using DataFrames the way they were intended, but they seem to be the only mechanism I have for displaying tables in Streamlit.
I tried using pandas.io.formats.style.Styler.highlight_null to set "opacity: 0" or "visibility: hidden", but Streamlit seemed to ignore these CSS properties.
I found this solution by playing around with WebStorm and PyCharm:
# table.py
import pandas as pd
import streamlit as st
df = pd.read_csv("nlp_metrics_v2.csv", header=0)
df = df.style.highlight_null(props="color: transparent;") # hide NaNs
st.dataframe(df)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With