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)