Streamlit st.data_editor() merging all text columns from each record into first row

Test data includes 3 records. Data seems to be loading into dataframe correctly based on len(df). All columns which are st.column_config.TextColumn have the issue - the single st.column_config.CheckboxColumn column seems to render correctly.

Environment:

  • Streamlit 1.51.0
  • Python 3.12.7
  • Ubuntu 24.04 on S390x

Any guidance here would be appreciated.

Thanks

Please can you share your example as an executable code snippet so someone can copy it and try it out?

Sure thing.

data = [{ "email": "xxx@my.com", "authorized": True, "roles": [ "admin" ], "groups": [ "xxx" ], "org": "xx", "time_created": "2025-11-12T21:18:41.433000", "id": "69125d6c5dc9a30a05133f69" }, { "email": "yyy@my.com", "authorized": True, "roles": [ "user" ], "groups": [], "org": "yy", "time_created": "2025-11-12T21:18:56.029000", "id": "6914e21f5dc9a30a05133f73" }]

df = pd.json_normalize(data)
st.session_state.df = df

if 'has_errors' not in st.session_state:
    st.session_state.has_errors = False

edited_df = st.data_editor(
    st.session_state.df,
    key="user_editor",
    column_config={
        "id": None,
        "email": st.column_config.TextColumn(
            label="Email",
            help="User Email",
            width="large",
            required=True
        ),
        "authorized": st.column_config.CheckboxColumn(
            label="Authorized",
            help="User authorization status",
            width="small",
            required=True
        ),
        "roles": st.column_config.ListColumn(
            label="User Roles",
            help="List of assigned user roles",
            width="medium"
        ),
        "groups": st.column_config.ListColumn(
           label="Report Groups",
           help="List of assigned report groups",
           width="medium"
        ),
        "org": st.column_config.TextColumn(
            label="Organization",
            help="Organization",
            width="small",
            required=True
        ),
        "time_created": None
    },
    disabled=["email","groups","org"],
    use_container_width=True,
    num_rows="fixed",
    hide_index=True
)

Hey @mathcatsand, any luck replicating?

Point to note is this exact code works correctly on arch64 and amd64 platforms. Seems on s390x platforms Streamlit is not recognizing the end of string/numeric columns (the CheckboxColumn fields seems to render correctly).

However, MultiselectColumn fields also render incorrectly (perhaps due to the string values):

Please let me know if there’s anything else you need or if there’s some things I could try.

Thanks, Glen

Hmmm. I’m not seeing the error, but I’m not on an s390x platform. If you can specifically isolate it to a certain environment, I think we can safely call it a bug. Can you file an issue on GitHub for our devs, noting the specific architecture that has the problem? I don’t have access to the right computer to test it, but one of our devs probably will.

1 Like

Happily, it looks like someone is already tackling the upstream fix in Arrow. :slight_smile:

1 Like