hari2425's picture
Update app.py
a1ecded verified
Raw
History Blame Contribute Delete
1.52 kB
import pandas as pd
import gradio as gr
import tempfile
def reformat_excel(file):
df = pd.read_excel(file)
# Drop rows where all expected columns are empty
df = df.dropna(subset=['Email', 'Status', 'Student', 'Answers/Question', 'Answers/Free Text answer'], how='all')
# Fill forward participant info
df[['Email', 'Status', 'Student']] = df[['Email', 'Status', 'Student']].ffill()
# Drop rows that still have missing Questions or Answers
df = df.dropna(subset=['Answers/Question', 'Answers/Free Text answer'])
# Debug info (optional for logs)
print("Unique Respondents:", df['Email'].nunique())
print("Unique Questions:", df['Answers/Question'].nunique())
# Pivot the cleaned data
pivot_df = df.pivot_table(
index=['Email', 'Status', 'Student'],
columns='Answers/Question',
values='Answers/Free Text answer',
aggfunc='first'
).reset_index()
pivot_df.columns.name = None # remove pivot index name
# Write to temp file
with tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx") as tmp:
pivot_df.to_excel(tmp.name, index=False)
return tmp.name
# Gradio interface
iface = gr.Interface(
fn=reformat_excel,
inputs=gr.File(label="Upload Excel File"),
outputs=gr.File(label="Download Reformatted Excel"),
title="Survey Formatter",
description="Converts raw survey Excel with one row per Q/A into a table with questions as columns."
)
if __name__ == "__main__":
iface.launch()