import pandas as pd import numpy as np def clean_dataframe(df: pd.DataFrame) -> pd.DataFrame: """Common data cleaning pipeline.""" # 1. Strip whitespace from string columns str_cols = df.select_dtypes(include='object').columns df[str_cols] = df[str_cols].apply(lambda c: c.str.strip()) # 2. Normalize column names df.columns = ( df.columns.str.strip() .str.lower() .str.replace(r'\s+', '_', regex=True) .str.replace(r'[^\w]', '', regex=True) ) # 3. Drop fully empty rows and columns df = df.dropna(how='all').dropna(axis=1, how='all') # 4. Fill numeric NaN with median num_cols = df.select_dtypes(include=np.number).columns df[num_cols] = df[num_cols].fillna(df[num_cols].median()) # 5. Remove duplicate rows df = df.drop_duplicates() return df.reset_index(drop=True)