Home
/1
import pandas as pd
def dataframe_summary(df: pd.DataFrame) -> pd.DataFrame:
summary = []
for col in df.columns:
col_data = df[col]
non_null = col_data.dropna()
unique_values = non_null.unique()
# 3 most frequent values
top_values = non_null.value_counts().head(3).index.tolist()
# 2 random values from remaining uniques
remaining = list(set(unique_values) - set(top_values))
random_values = (
pd.Series(remaining)
.sample(min(2, len(remaining)), random_state=42)
.tolist()
if remaining
else []
)
sample_values = top_values + random_values
summary.append(
{
"column": col,
"unique_count": len(unique_values),
"missing_values": col_data.isna().sum(),
"non_nan_values": col_data.notna().sum(),
"sample_values": sample_values,
}
)
result = pd.DataFrame(summary)
# sort by unique value count ascending
result = result.sort_values(by="unique_count", ascending=True).reset_index(
drop=True
)
return result
# Usage
summary_df = dataframe_summary(df)
summary_df.to_csv("dataframe_summary.csv", index=False)