前言
最近经常用到 Pandas 来对 Excel 文件进行操作。
所以,在这里简单记录下自己平时用到的处理过程。
这里没有对 Pandas 的介绍,会持续更新的,仅是个人记录而已,不喜勿喷~
构建数据1
这里为了简单仅准备了两个 Excel 文件,内容也超级简单。
每个 Excel 文件中,也仅是简单地弄了两个 Sheet:语文和数学。数据就不提供了,大家简单营造下就行。
1、合并指定目录下的所有 Excel 文件
import pandas as pd
import os
path = r'.\学生成绩'
# 获取指定文件夹下的所有excel文件
excels = [file for file in os.listdir(path) if ('.xls' in file) or ('.xlsx' in file)]
# 读取的excel数据的列表,元素是{sheet_name: sheet_data, ...}的字典
all_dfs = []
print('---------------\t开始读取数据\t---------------')
for excel in excels:
print(f'####\t{excel}')
# converters={'学号': str} 防止学号首位的0丢失
dfs = pd.read_excel('\\'.join([path, excel]), sheet_name=None,
converters={'学号': str})
all_dfs.append(dfs)
print('---------------\t结束读取数据\t---------------')
print('---------------\t开始合并及写入数据\t---------------')
writer = pd.ExcelWriter('\\'.join([path, '学生成绩(汇总).xlsx']), mode='w')
for key in all_dfs[0].keys():
print(f'####\t{key}')
# 合并excel数据列表中,所有sheet_name等于key的数据
concat_df = pd.concat([df[key] for df in all_dfs])
concat_df.to_excel(writer, sheet_name=key, index=False)
writer.save()
print('---------------\t结束合并及写入数据\t---------------')
效果:
注:
1)之前写了3-4个函数,读指定目录下的Excel文件、读取Excel数据、合并数据等,一步步的,不如这样节省时间;
2)关键代码很少,完全可以去掉各个print(),这只是个人习惯,喜欢看看运行的进度;
本代码,是针对多个sheet的,若想只获取某个sheet的合并数据,其实更简单。
比如:只想合并语文成绩
import pandas as pd
import os
path = r'.\学生成绩'
# 获取指定文件夹下的所有excel文件
excels = [file for file in os.listdir(path) if ('.xls' in file) or ('.xlsx' in file)]
all_dfs = []
for excel in excels:
df = pd.read_excel('\\'.join([path, excel]), sheet_name='语文',
converters={'学号': str})
all_dfs.append(df)
writer = pd.ExcelWriter('\\'.join([path, '学生成绩(语文).xlsx']), mode='w')
concat_df = pd.concat(all_dfs)
concat_df.to_excel(writer, sheet_name='语文', index=False)
writer.save()