python 处理 excel 实例 --- 成绩单合并与分析

场景与要求:

将文件夹内的所有成绩单合并到一张表格内,并计算平均值,将其中低于60的条目标记出来

设计:

  1. 读取指定路径下的所有成绩单,以学号为新的索引进行合并,输出DataForm数据。
  2. 保存DataFrom数据到指定的excel,再使用openpyxl进行单元格的样式设置并保存。

代码:

import os
import pandas as pd
import numpy as np
import openpyxl
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill, Border

def excel_df_data(dirs):
  if not os.path.exists(dirs) or not os.listdir(dirs): raise  Exception('文件夹不存在')
  # 文件列表
  file_list = [v for v in os.listdir(dirs)]
  # 文件数据集合
  pd_list = []
  # 成绩单名称的集合,用与生成二级表头
  pd_key_list = []
  for excle_file in file_list:
    v = pd.read_excel(os.path.join(dirs, excle_file))
    # 第一种方法  设置名称作为索引,并替换原先的索引
    v.set_index('名字',inplace=True)
    # 第二种方法  将名称的值作为索引
    # v.index = v['名字'].values
    # # 删除名称一列 axis 默认是0 表示为行
    # v= v.drop('学号', axis=1)
    # 二维数组
    # v.columns = [[excle_file],v.columns]
    # 新增加一列平均值
    v['svg'] = v.apply(lambda x: x.sum()/len(x), axis=1)
    # 保留一位小数
    v['svg'] = v['svg'].apply(lambda x: round(x, 1))
    # v['svg'] = v['svg'].apply(lambda x: format(x, '.2%'))
    pd_list.append(v)
    pd_key_list.append(excle_file[0:excle_file.index('.')])
  pd_list_data =pd.concat(pd_list, keys=pd_key_list,  axis=1,join='outer')
  # 输出最后合并的数据
  return pd_list_data

def add_style(file_path):
  #加载已存在的excel
  book = openpyxl.load_workbook(file_path)
  sheet = book[book.sheetnames[0]]
  # 删除第三行,因为是空行
  sheet.delete_rows(3)
  # 设置样式,让第一行表头有不一样的背景颜色,因为只能是单元格设置样式,所以需要循环
  for v in  sheet[1]:
    v.fill=PatternFill(fill_type='solid', fgColor="B4C6E7") 
  for v in  sheet[2]:
    v.fill=PatternFill(fill_type='solid', fgColor="4D83D6") 
  # 给低于60的条目加上红色
  for row_index in range(3, sheet.max_row+1):
    for col_index in range(1, sheet.max_column):
      __cel = sheet[row_index][col_index]
      if type(__cel.value) in [int, float] and __cel.value < 60:
        __cel.fill=PatternFill(fill_type='solid', fgColor="D6654D") 
 
  # 保存
  book.save(file_path)
   

if __name__ == '__main__':
  # 获取合并数据
  pd_data = excel_df_data('成绩单')
  # 保存
  pd_data.to_excel('b.xlsx')
  # 样式处理
  add_style('b.xlsx')

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值