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

如何将Streamlit的st.dataframe转换为pandas DataFrame或数组列表?

如何将st.dataframe转换/保存为pandas DataFrame或数组列表?

问题原因

st.dataframe() 是Streamlit用于在界面展示DataFrame的组件,它的返回值是DeltaGenerator类型的对象(用于控制界面元素),而非你传入的原始数据。你试图将这个界面控制对象转换为DataFrame,自然会触发报错:

streamlit.errors.StreamlitAPIException:无法将<class 'streamlit.delta_generator.DeltaGenerator'>类型的对象转换为pandas.DataFrame。问题对象:

解决方案

根据你的需求分两种情况处理:

1. 无需用户交互,仅需保存/转换原始展示数据

你传入st.dataframe()的df本身就是pandas DataFrame,直接使用它即可:

import streamlit as st
import pandas as pd
import numpy as np

# 生成原始DataFrame
df = pd.DataFrame(np.random.randn(50, 20), columns=("col %d" % i for i in range(20)))

# 在界面展示数据
st.dataframe(df)

# 直接使用原始df转换为数组列表
df_list = df.values.tolist()  # 转换为嵌套列表
df_array = df.to_numpy()      # 转换为numpy数组

# 保存为新的DataFrame(直接复制原始数据)
new_df = df.copy()

2. 需要获取用户在界面操作后的DataFrame(如排序、过滤、编辑)

如果需要获取用户在界面上修改/操作后的数据,不能用st.dataframe(),需改用st.data_editor()——它支持用户交互,并返回修改后的DataFrame:

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 20), columns=("col %d" % i for i in range(20)))

# 使用data_editor展示并允许用户操作,获取修改后的数据
edited_df = st.data_editor(df)

# 将修改后的数据转换为数组列表
edited_list = edited_df.values.tolist()
edited_array = edited_df.to_numpy()

# 保存修改后的DataFrame
edited_df.to_csv("modified_data.csv", index=False)  # 保存为CSV

内容的提问来源于stack exchange,提问作者artistic soul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:55:01