Функция для проверки данных

В настоящее время я пытаюсь выполнить проверку качества данных в Python, в основном используя Pandas.

Приведенный ниже код подходит для этой цели. Идея состоит в том, чтобы выполнять проверки в Python и экспортировать в файл Excel для целей аудита.

Я выполняю проверки, как показано ниже, в 4 разных файлах, иногда проверяя, есть ли записи в одном файле и в другом и т. Д.

df_symy это просто еще один DataFrame, который я импортировал внутри того же класса.

Мне интересно, есть ли лучший путь для выполнения этой задачи, например:

  • создать функцию для каждой проверки
  • создать более осмысленный способ проверки данных и представления результатов и т. д.

def run_sharepoint_check(self) -> pd.DataFrame:
        """Perform checks on data extracted from SharePoint.

        Check 1: Amount decided is 0 or NaN
        Check 2: Invalid BUS ID
        Check 3: Duplicated entries. It also tags the latest entry
        Check 4: SYMY Special not in SharePoint
        """
        # Use this function to check the data we have from SharePoint
        # and return DF with checks in the excel file 
        # Another function will be used to process the data and produce
        # the final list
        df = self.sharepoint_data.copy()

        df_symy = self.symy_data
        df_symy = df_symy.loc[df_symy['COMMITMENT_TYPE'].str[0] == 'S']
        
        symy_cols = ['BUYER_NUMBER', 'Balloon ID',
                     'CLD_TOTAL_AMOUNT', 'POLICY_CURRENCY']
        
        df = df.merge(right=df_symy[symy_cols],
                      how='outer',
                      left_on=['Balloon ID', 'BUS ID'],
                      right_on=['Balloon ID', 'BUYER_NUMBER'])
        
        check_1 = df['Amount decided'] == 0 | df['Amount decided'].isna()
        df.loc[check_1, 'check_1'] = 'Amount decided is 0 or NaN'

        check_2 = df['BUS ID'].isna()
        df.loc[check_2, 'check_2'] = 'Invalid BUS ID'

        check_3 = df.duplicated(subset=['Balloon ID', 'BUS ID'], keep=False)
        df.loc[check_3, 'check_3'] = 'Duplicated entry'
        
        check_3_additional = ~df.duplicated(
            subset=['Balloon ID', 'BUS ID'], keep='first'
        )
        # Filter only the entries that are duplicated
        # Out of those, the first one is the latest
        df.loc[(check_3) & (check_3_additional),
               'check_3'] = 'Duplicated entry (Latest)'

        # Match Balloon+BUSID (SYMY) to SharePoint
        check_4 = (~df.duplicated(subset=['Balloon ID', 'BUS ID'],
                                  keep='first')) & (df['BUS ID'].isna())
        df.loc[check_4, 'check_4'] = 'SYMY SA not in SharePoint'

        check_cols = ['check_1', 'check_2', 'check_3', 'check_4']

        # .fillna('OK') just for visual purposes in Excel.
        df[check_cols] = df[check_cols].fillna('OK')
        
        # self.data_checks_dfs in the init method is an empty dictionary.
        self.data_checks_dfs['SharePoint_checks'] = df
       
        return df

Итак, как я могу это улучшить?

Есть ли у кого-нибудь задачи такого типа, автоматизированные с помощью Python?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *