predicta.py->
Код: Выделить всё
class PredictaApp:
def __init__(self):
self.df = None
Код: Выделить всё
def handle_sidebar(self):
st.sidebar.title("Predicta")
st.sidebar.markdown("---")
CustomTheme.set_theme()
uploaded_file = st.file_uploader("Upload CSV", type=["csv"])
if uploaded_file is not None:
self.df = pd.read_csv(uploaded_file)
Код: Выделить всё
elif selected_option == "Impute Missing Values":
if self.df is not None:
impute = missing_data.DataImputer(self.df)
self.df = impute.imputer()
Код: Выделить всё
class DataImputer(PredictaApp):
def __init__(self, data):
super().__init__()
if not isinstance(data, pd.DataFrame):
raise ValueError("Input data must be a pandas DataFrame.")
self.data = data
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.INFO)
self.logger.addHandler(logging.StreamHandler())
Код: Выделить всё
def drop_missing(self, axis=0):
try:
original_shape = self.data.shape
self.data.dropna(axis=axis, inplace=True)
if self.data.shape == original_shape:
return None
else:
return self.data
except Exception as e:
self.logger.error("An error occurred while dropping missing values: %s", str(e))
raise
Проблема, с которой я сталкиваюсь, заключается в том, что при При переключении между различными параметрами (например, «Просмотр данных», «Вменение пропущенных значений», «Обнаружение выбросов» и т. д.) в приложении Streamlit изменения, внесенные в DataFrame в предыдущем варианте, не сохраняются. В частности, когда я вменяю пропущенные значения с помощью класса DataImputer, а затем переключаюсь на другой вариант, исходный немодифицированный DataFrame загружается снова, перезаписывая изменения, внесенные в процессе вменения.
Я хочу убедитесь, что изменения, внесенные в DataFrame в одном параметре (например, «Вменение пропущенных значений»), передаются в другие параметры (например, «Обнаружение выбросов», «Выбор моделей ML» и т. д.), чтобы последующие операции выполнялись над измененным DataFrame, а не исходный немодифицированный DataFrame.
Вкратце, формулировка проблемы такова: «Как сохранить изменения, внесенные в DataFrame в различных параметрах приложения Streamlit, особенно после вменения пропущенных значений с помощью класс DataImputer."
Я попробовал изменить метод imputer в классе DataImputer, чтобы он возвращал измененный DataFrame, а затем присвоил его обратно self.df< /code> в классе PredictaApp. Я ожидал, что это гарантирует, что изменения, внесенные в DataFrame в классе DataImputer, будут отражены в self.df в классе PredictaApp, и последующие операции с DataFrame будут использовать измененный данные по разным параметрам.
Однако даже после внесения этих изменений, когда я переключился на новую опцию в Streamlit, исходный немодифицированный DataFrame загружался снова, перезаписывая изменения, сделанные в предыдущем вариант.
Подробнее здесь: https://stackoverflow.com/questions/782 ... pplication