Pandas 使用小技巧(Excel篇)

324 阅读2分钟

前言

最近经常用到 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()