python-3.x 如果在streamlit中选择了任何筛选器,则显示整个DataFrame

f87krz0w  于 2022-12-20  发布在  Python
关注(0)|答案(1)|浏览(132)

我想streamlit显示整个数据框时,任何过滤器应用。
下面是我认为足够有用的代码:

df = pd.read_csv('classes_particulars.csv')

#Filters
idCode = st.sidebar.multiselect(
    "Selecciona un ID",
    ('ABSUDUHM', 'DWHWBMMX', 'MIXEECJR', 'NFKQWKOP', 'RQWLPVCJ')
)
preuPagat = st.sidebar.number_input(
    "Preu pagat"
)

dfSelection = df.query(
    "Preu == @preuPagat or ID == @idCode"
)

要显示dfSelection I代码:

st.table(dfSelection)

但是,如果没有选择筛选器,我希望显示st.table(df)
下面是我对一堆错误所做的尝试:

if df.query("Preu == @preuPagat or ID == @idCode"):
    df.table(dfSelection)
else:
    df.table(df)

我得到的错误是这样的:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

以下是使用st.table(df)时streamlit应用的外观:

以下是Streamlit应用程序在使用时的外观:

if len(df.query("Preu == @preuPagat or ID == @idCode")):
    st.table(dfSelection)
else:
    st.table(df


有什么帮助吗?

ih99xse1

ih99xse11#

使用len(df)来检查是否有内容被过滤掉了。还可以使用st.table(df),而不是df.table(df)

...

if len(df.query("Preu == @preuPagat or ID == @idCode")):
    st.table(dfSelection)
else:
    st.table(df)

或者

...

dfSelection = df.query(
    "Preu == @preuPagat or ID == @idCode"
)

if len(dfSelection):
    st.table(dfSelection)
else:
    st.table(df)

完整代码

import streamlit as st
import pandas as pd

data= {
    'Preu':[14, 15, 14, 12, 15],
    'ID' :['ABSUDUHM','DWHWBMMX','MIXEECJR','NFKQWKOP','RQWLPVCJ']
}

# df = pd.read_csv('classes_particulars.csv')
st.header('Dashboard')
df = pd.DataFrame(data)

#Filters
idCode = st.sidebar.multiselect(
    "Selecciona un ID",
    ('ABSUDUHM', 'DWHWBMMX', 'MIXEECJR', 'NFKQWKOP', 'RQWLPVCJ')
)
preuPagat = st.sidebar.number_input(
    "Preu pagat"
)

dfSelection = df.query(
    "Preu == @preuPagat or ID == @idCode"
)

if len(dfSelection):
    st.table(dfSelection)
else:
    st.table(df)

输出

相关问题