WeldingSpotPerformance/src/controller/converter.py

36 lines
1.2 KiB
Python

import pandas as pd
import traceback
import sys
from loguru import logger
# FIXME: костыль для выключения предупреждения "replace deprecated"
pd.set_option('future.no_silent_downcasting', True)
from utils.base.base import BaseDataConverter
class DataConverter(BaseDataConverter):
@staticmethod
def _replace_bool(dataframe: pd.DataFrame) -> pd.DataFrame:
try:
bool_columns = dataframe.columns[dataframe.isin([True, False]).any()]
dataframe[bool_columns] = dataframe[bool_columns].replace({True: 1, False: 0})
return dataframe
except:
return None
def convert_data(self, files: list[str]) -> None:
try:
dataframes = [pd.read_csv(file) if file != '' else None for file in files]
converted_dataframes = list(map(self._replace_bool, dataframes))
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
logger.error(pymsg)
converted_dataframes = [None]
finally:
self._mediator.notify(self, converted_dataframes)