В настоящее время я пытаюсь выполнить проверку качества данных в 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?