乐于分享
好东西不私藏

按组别+学校拆分Excel 文件的Python程序 (附代码)

按组别+学校拆分Excel 文件的Python程序 (附代码)

点击蓝字关注我们

大显整理

“面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。——华罗庚”

导语:

缘起要处理一些数据,本来复制粘贴至少一个小时的工作,利用大模型5分钟解决。由于保密性原则,思路一样,关键数据已脱敏处理~

提问大模型:

生成一个 python 程序。功能是读取 excel 文件中的数据,将每个组别生成一个 excel 表格,并将每个学校数据生成对应表格中的一个表,以序号 + 组别命名文件

代码非常全面,但是解释性语句过多,过于繁琐了。

继续提问:

去除解释,读取的文件就在同目录下的 1.xlsx,重新给出代码
截图并提问,为何出错,请修正
win+R
执行cmd指令,果然第一种方式出错,第二种成功
将程序保存至excel表格同目录中,运行程序,很快生成新的文件夹,结果如我所愿。
简易代码如下:
import pandas as pdimport osfrom openpyxl import Workbookfrom pathlib import PathINPUT_EXCEL_PATH = '1.xlsx'GROUP_COLUMN = '组别'SCHOOL_COLUMN = '学校名称'OUTPUT_FOLDER = './拆分结果'SEQUENCE_DIGITS = 2def main():    if not os.path.exists(INPUT_EXCEL_PATH):        print("文件1.xlsx不存在")        return    df = pd.read_excel(INPUT_EXCEL_PATH)    for col in [GROUP_COLUMN, SCHOOL_COLUMN]:        if col not in df.columns:            print(f"表格缺少列:{col}")            return    df = df.dropna(subset=[GROUP_COLUMN, SCHOOL_COLUMN])    Path(OUTPUT_FOLDER).mkdir(exist_ok=True)    groups = df[GROUP_COLUMN].unique()    for idx, group in enumerate(groups, 1):        group_data = df[df[GROUP_COLUMN]==group]        fname = f"{idx:0{SEQUENCE_DIGITS}d}_{group}.xlsx"        wb = Workbook()        wb.remove(wb.active)        schools = group_data[SCHOOL_COLUMN].unique()        for school in schools:            s_data = group_data[group_data[SCHOOL_COLUMN]==school]            sheet_name = str(school).replace('\\','_').replace('/','_').replace(':','_').replace('*','_').replace('?','_').replace('"','_').replace('<','_').replace('>','_').replace('|','_')[:30]            ws = wb.create_sheet(sheet_name)            ws.append(list(df.columns))            for _, row in s_data.iterrows():                ws.append(row.tolist())        wb.save(os.path.join(OUTPUT_FOLDER, fname))    print("全部拆分完成")if __name__ == "__main__":    main()
对于四十多行的代码,我还是觉得繁琐了,于是提问:
非常好,请再精简代码,越少越好
结果一样,但是果然精简了不少
精简代码如下:
import pandas as pd, osfrom openpyxl import Workbookfrom pathlib import Pathf = "1.xlsx"g_col, s_col = "组别""学校名称"out = "./拆分结果2"Path(out).mkdir(exist_ok=1)df = pd.read_excel(f).dropna(subset=[g_col, s_col])for i, g in enumerate(df[g_col].unique(), 1):    wb = Workbook()    wb.remove(wb.active)    gd = df[df[g_col]==g]    for s in gd[s_col].unique():        ws = wb.create_sheet(str(s).translate(str.maketrans(r'\/:*?"<>|','_________'))[:30])        ws.append(df.columns.tolist())        [ws.append(r.tolist()) for _,r in gd[gd[s_col]==s].iterrows()]    wb.save(f"{out}/{i:02d}_{g}.xlsx")print("完成")

结语:

大模型为编程新手扫清了数据处理障碍,简化代码编写,降低技术门槛,让数据分析事半功倍。^-^

备注:此文为安徽省教育科学研究项目学习资料
《县域中小学信息科技教师人工智能素养提升路径研究》、《县域中小学教师数字素养提升策略研究》

撰    稿|大   显

           审    核|信息技术智慧+