作为一名金融狗,小白我在上学的时候用的统计建模软件是R,操作最多的数据就是csv文件,导致小白在现在学习python的时候也会习惯性地把所有的数据都转成csv,然后只会用pandas.read_csv()。
但其实平时咱们会经常性地需要处理excel文件,因此,学习如何用python处理excel文件是非常有必要的。
python这么牛批强大的语言,自然提供了多种处理excel文件的包,小白在此只分享自己觉得最好用的一种方式。
首先,自行创建一个文件夹【小白中学】,里面又包含子文件夹【小白初中】和【小白高中】。【小白初中】文件夹中包含【一年级】和【二年级】两个excel文件,【小白高中】文件夹中也包含【一年级】和【二年级】两个excel文件。而【一年级】和【二年级】的表结构一样,有【班级A】和【班级B】两个sheet,每个班级表包含学生基本信息(学号、姓名、生日)。
基本结构如下:
我们先来看看文件信息:
import os
for root,dirs,files in os.walk(r'F:\小白中学'):
for file in files:
#获取文件所属目录
print(root)
#文件名
print(file)
#获取文件路径
print(os.path.join(root,file))
加载包:
import numpy as np
import pandas as pd
import xlrd
from openpyxl import load_workbook
工作路径切换到【小白中学】这个文件夹所在的路径:
import os
os.chdir('F:/')
任务一、将每个年级的2个班级学生汇总存到新的sheet
我们先来做第一个任务:将初、高中共四个年级的四张excel班级信息分别合并,各自新增一个sheet记录汇总的本年级学生信息。
for root,dirs,files in os.walk(r'F:\小白中学'):
for file in files:
#用来存放每个excel的所有sheet汇总数据
excel_data=pd.DataFrame()
#获取excel路径和文件名
excel_name=os.path.join(root,file)
#读取excel文件
data_wb=xlrd.open_workbook(excel_name)
#获取文件中所有表格名
sheet_names = data_wb.sheet_names()
#在每一个excel文件中,读取所有sheet的数据,加到all_data
for i in sheet_names:
df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
excel_data=excel_data.append(df)
#生成一个文件写入对象,相当于一个excel
writer = pd.ExcelWriter(excel_name,engine='openpyxl')
book = load_workbook(writer.path)
writer.book = book
#写入一个新的sheet
excel_data.to_excel(excel_writer=writer,sheet_name='年级全体学生信息')
writer.save()
writer.close()
这时候我们随便打开一个excel(比如打开初中一年级的excel),发现多了一个sheet,记录了A、B两个班级的汇总学生信息。
任务二:将所有的学生信息汇总到一张新的excel
接下来,我们来做第一个任务,将初中高中总共8个班级的学生信息汇总到一张表,并存到一个excel文件中。
#用来存放汇总数据
all_data=pd.DataFrame()
for root,dirs,files in os.walk(r'F:\小白中学'):
for file in files:
#获取excel路径和文件名
excel_name=os.path.join(root,file)
#读取excel文件
data_wb=xlrd.open_workbook(excel_name)
#获取文件中所有表格名
sheet_names = data_wb.sheet_names()
#在每一个excel文件中,读取前两张sheet的数据,加到all_data
for i in [0,1]:
df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
all_data=all_data.append(df)
查看汇总数据:
all_data=all_data.reset_index()
all_data
all_data部分截图
将汇总的dataframe存储到一张新的excel:
all_data.to_excel(r'F:\小白中学\学生信息.xlsx',sheet_name='全校学生信息')
可以看到【小白中学】文件夹中多了一个excel文件。
任务三:将新生成的学生信息表拆成4张年级表存到一个excel
all_data=pd.read_excel(r'F:\小白中学\学生信息.xlsx',sheet_name='全校学生信息')
#初中一年级
data1=all_data.iloc[:6,:]
#初中二年级
data2=all_data.iloc[6:12,:]
#高中一年级
data3=all_data.iloc[12:18,:]
#高中二年级
data4=all_data.iloc[18:,:]
将其另存为一个excel。
with pd.ExcelWriter(r'.\小白中学\全校学生信息表.xlsx') as writer:
data1.to_excel(writer, sheet_name='初中一年级')
data2.to_excel(writer, sheet_name='初中二年级')
data3.to_excel(writer, sheet_name='高中一年级')
data4.to_excel(writer, sheet_name='高中二年级')
查看表信息