test / app.py
AhmedUddin2002's picture
Update app.py
1d9a677 verified
import pandas as pd
import re
import io
import gradio as gr
def clean_excel(file):
try:
# Read the uploaded Excel file directly from the file object
df_raw = pd.read_excel(file, skiprows=4)
df_raw.columns = [
'S.No', 'District', 'Institution Name',
'V Minorities Sanctioned', 'V Minorities Admitted',
'V NonMinorities Sanctioned', 'V NonMinorities Admitted',
'Course',
'Inter Minorities Sanctioned', 'Inter Minorities Admitted',
'Inter NonMinorities Sanctioned', 'Inter NonMinorities Admitted'
]
df_raw = df_raw.iloc[:-1] # Remove summary/footer row
df_raw['Institution Name'] = df_raw['Institution Name'].astype(str).apply(
lambda x: re.sub(r'\([^)]*\)', '', x).replace('Boys', 'B').replace('Girls', 'G').strip()
)
numeric_cols = [
'V Minorities Sanctioned', 'V Minorities Admitted',
'V NonMinorities Sanctioned', 'V NonMinorities Admitted',
'Inter Minorities Sanctioned', 'Inter Minorities Admitted',
'Inter NonMinorities Sanctioned', 'Inter NonMinorities Admitted'
]
for col in numeric_cols:
df_raw[col] = pd.to_numeric(df_raw[col], errors='coerce').fillna(0).astype(int)
df_v = df_raw[['S.No', 'District', 'Institution Name',
'V Minorities Sanctioned', 'V Minorities Admitted',
'V NonMinorities Sanctioned', 'V NonMinorities Admitted']].copy()
df_v['Class'] = 'V'
df_v['Sanctioned'] = df_v['V Minorities Sanctioned'] + df_v['V NonMinorities Sanctioned']
df_v['Admitted'] = df_v['V Minorities Admitted'] + df_v['V NonMinorities Admitted']
df_inter = df_raw[['S.No', 'District', 'Institution Name',
'Inter Minorities Sanctioned', 'Inter Minorities Admitted',
'Inter NonMinorities Sanctioned', 'Inter NonMinorities Admitted']].copy()
df_inter['Class'] = 'Inter 1st Year'
df_inter['Sanctioned'] = df_inter['Inter Minorities Sanctioned'] + df_inter['Inter NonMinorities Sanctioned']
df_inter['Admitted'] = df_inter['Inter Minorities Admitted'] + df_inter['Inter NonMinorities Admitted']
df_final = pd.concat([df_v, df_inter], ignore_index=True)
df_final['Vacancies'] = df_final['Sanctioned'] - df_final['Admitted']
df_final = df_final[['S.No', 'District', 'Institution Name', 'Class', 'Sanctioned', 'Admitted', 'Vacancies']]
output = io.StringIO()
df_final.to_csv(output, index=False)
output.seek(0)
return gr.File.update(value=io.BytesIO(output.getvalue().encode()), filename="cleaned_data.csv")
except Exception as e:
return f"❌ Error: {e}"
# Gradio Interface
interface = gr.Interface(
fn=clean_excel,
inputs=gr.File(label="Upload Excel File (.xlsx)"),
outputs=gr.File(label="Download Cleaned CSV"),
title="📊 Clean Admission Excel Data",
description="Upload your Excel file. Get a cleaned CSV ready to download."
)
if __name__ == "__main__":
interface.launch()