Не удается выбрать список имен столбцов и просмотреть данные в этих столбцах в Streamlit

#python #streamlit

#python #streamlit

Вопрос:

В моем коде мне нужно иметь возможность фильтровать имена столбцов (в левом компоненте) и показывать только отфильтрованные столбцы с информацией после того, как пользователь загрузил файл CSV. Это мой код, но на данный момент я застрял на нем и не имею ни малейшего представления о том, как я могу реализовать требования.

 try:
    from enum import Enum
    from io import BytesIO, StringIO
    from typing import Union

    import pandas as pd
    import streamlit as st
except Exception as e:
    print(e)

STYLE = """
<style>
img {
    max-width: 100%;
}
</style>
"""


class FileUpload(object):

    def __init__(self):
        self.fileTypes = ["csv", "png", "jpg"]

    def run(self):
        """
        Upload File on Streamlit Code
        :return:
        """
        st.info(__doc__)
        st.markdown(STYLE, unsafe_allow_html=True)
        st.sidebar.title("Filter data")
        st.set_option('deprecation.showfileUploaderEncoding', False)
        file = st.file_uploader("Upload file", type=self.fileTypes)
        show_file = st.empty()
        if not file:
            show_file.info("Please upload a file of type: "  
                           ", ".join(["csv", "png", "jpg"]))
            return
        content = file.getvalue()
        if isinstance(file, BytesIO):
            show_file.image(file)
        else:
            data = pd.read_csv(file)
            st.dataframe(data.head(10))
        file.close()


if __name__ == "__main__":
    helper = FileUpload()
    helper.run()
  

Комментарии:

1. Сохраняете ли вы входной CSV-файл в фрейме данных pandas? Я думаю, что затем вы можете зафиксировать состояние фильтра (фильтров) с левой стороны, выполнить обработку в pandas и распечатать фрейм данных pandas справа

Ответ №1:

Если вы читаете в csv-файле, вы можете использовать виджет множественного выбора для выбора столбцов, которые хотите отобразить:

 import streamlit as st
import pandas as pd
  
# load csv
uploaded_file = st.file_uploader('upload')

# into dataframe
df = pd.read_csv(uploaded_file)             

'## multi select'
cols = st.multiselect('select columns:', df.columns, default=[])
st.write('You selected:', cols)

# show dataframe with the selected columns
st.write(df[cols])
  

В текущей версии (v0.68.1) программа загрузки файлов содержит ошибки. Поэтому, если вы получите сообщение об ошибке при повторном запуске, рассмотрите возможность понижения версии до версии 0,66