[英]Streamlit loading column data takes too much time
我在 streamlit 中使用了简单的代码片段,它显示了由我拥有的 excel 组成的数据框。 问题是在streamlit area的filter column内加载数据需要太多时间。 在那个过滤器区域,我搜索材料名称,但加载并显示我要选择的数据甚至需要 30 秒。 如何解决它并使选择数据最快?
代码是:
import streamlit as st
import pandas as pd
@st.cache
def load_data(nrows):
df=pd.read_excel('materials.xlsx',nrows=nrows)
return df
df=load_data(100000)
species = st.multiselect('SELECT THE MATERIAL', df['Name'])
new_df = df[(df['Name'].isin(species))]
st.write(new_df)
并显示它如何选择数据太慢,请看: https : //streamable.com/kjis2
最终,如果不知道代码的哪一部分运行缓慢(以及实际加载了多少数据),就很难给出具体的建议。 看起来您正在从电子表格中加载 100,000 行。 这可能是大量数据,特别是如果这些行本身很大。
一些尝试:
time.time()
一样简单,并输出两个值之间的差异:import contextlib
import time
import pandas as pd
import streamlit as st
@contextlib.contextmanager
def profile(name):
start_time = time.time()
yield # <-- your code will execute here
total_time = time.time() - start_time
print("%s: %.4f ms" % (name, total_time * 1000.0))
with profile("load_data"):
df = pd.read_excel('materials.xlsx',nrows=100000)
with profile("create_multiselect"):
species = st.multiselect('SELECT THE MATERIAL', df['Name'])
with profile("filter_on_name"):
new_df = df[(df['Name'].isin(species))]
@st.cache
注释更改为@st.cache(allow_output_mutation=True)
。 这将使 Streamlit 避免对函数的输出进行散列(这是一个巨大的数据帧,可能需要一段时间来散列)。pandas.read_excel
采用usecols
参数,可让您限制解析哪些列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.