如何用python将一张excel表按某一列分类为多张表

项目场景:

python数据处理,excel, pandas


问题描述

在这里插入图片描述

例如:当我们遇到上述表格,我们想把表格按照某一列来拆分为多张表,数据量少的时候可以简单的CTRL+C,但是当数据量很大的时候我们可以怎么操作呢?不妨用python来解决一下。
我们这里是按学院来拆分,将不同学院的同学拆分在不同的表中


代码展示:

import pandas as pd
data = pd.read_excel(r"C:\Users\Desktop\xs.xlsx")
rows = data.shape[0]  #获取行数 shape[1]获取列数
department_list = []
 
for i in range(rows):
    temp = data["学院"][i]
    if temp not in department_list:    #防止重复
        department_list.append(temp)   #将sheet_name的分类存在一个列表中
 
n = len(department_list)    #类别数
#学院有几个类别这里就新建几个
for i in range(1,5):
    locals()['df'+str(i)] = pd.DataFrame()  
#要是类很多的话可以用local()的方法创建自变量
df_list = [df1,df2,df3,df4,df5]
for department in range(n):
    for i in range (0, rows):
        if data["学院"][i] == department_list[department]:
            df_list[department] = pd.concat([df_list[department], data.iloc[[i],:]], axis = 0, ignore_index = True)
    
writer = pd.ExcelWriter(r'C:\Users\Desktop\各学院学生.xlsx')    #利用pd.ExcelWriter()存多张sheets
 
for i in range(n):
    df_list[i].to_excel(writer, sheet_name = str(department_list[i]), index=False)    #注意加上index=FALSE 去掉index列
 
writer.save()

动态生成变量:

用Python循环创建多个变量, 如创建 a1= 、a2= 、a3= 、a4= 、a5= 或 self.a1= 、self.a2= 、 self.a3=

一. 可以通过python的内置函数locals 来完成

locals是python的内置函数,他可以以字典的方式去访问局部和全局变量。
python里面用名字空间记录着变量,就像javascript的window一样,他记录着各种全局变量。
每个模块,每个函数都有自己的名字空间,记录着变量,常量,类的命名和值。

1 createVar = locals()
2 listTemp = range(1,10)
3 for i,s in enumerate(listTemp):
4     createVar['a'+i] = s
5 print a1,a2,a3

二. 对于class,推荐使用setattr()方法

1 class test(object) :
2     def __init__(self):
3         dic={'a':'aa','b':'bb'}
4         for i in dic.keys() :
5             setattr(self,i,dic[i]) #第一个参数是对象,这里的self其实就是test.第二个参数是变量名,第三个是变量值
6         print(self.a)
7         print(self.b)
8 t=test()

结果展示:

在这里插入图片描述

如果想进一步把sheet拆为不同的excel表,可以用宏来完成
用常规的一步步操作大家都知道吧,但工作表一多,工作量是很大的,也就变成不现实了。用宏来解决,将每个工作表导出到这个文件的同名文件夹下。
右键任意一个sheet,点击代码,将下面代码复制到代码框,运行就可以实现啦。
Sub SaveAllSheet()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim TPath As String, XSheet As Worksheet
TPath = ActiveWorkbook.Path
For Each XSheet In ActiveWorkbook.Sheets
XSheet.Copy
ActiveWorkbook.SaveAs Filename:=TPath & “” & ActiveSheet.Name & “.xls”
ActiveWindow.Close
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值