Python 基于openpyxl的表格数据处理 举例为统计身高数据

基于openpyxl的表格数据处理

注意事项:将data.html文件放到py文件同级目录下使用相对路径,或使用绝对路径。data.xlsx群里有,没找到可以私聊我。

注意事项:如果不确定自己的操作是否影响源数据,请在代码最后保存语句中换成其他路径,可以避免覆盖文件内容。

需求:

1、按性别分析平均身高
2、按姓氏分析人数
3、按姓氏分析平均身高

import openpyxl
#Excel 第一行第一列是[1,1]

# 使用相对路径
wb = openpyxl.load_workbook('data.xlsx')
# 选择data表单
sh = wb["data"]

sheet = wb.active   # 将活跃表单赋值给一个变量


man = 0 # 男生人数
woman = 0 # 女生人数
manHeight = 0 #男身高和
womanHeight = 0 #女身高和
womanAvg = 0 #男平均身高
manAvg = 0 #女平均身高

# 用于获取key值
title=[]
# 姓氏-人数
head={}
# 姓氏-身高平均
headAvg={}

# 按行读取转换列表,第一行当做key
for item in list(sh.rows)[0]:
    title.append(item.value)

# 读取姓氏并写入head字典和headAvg字典
for item in list(sh.columns)[0]:
    name = item.value
    headKey = list(head.keys())
    if name[0]=='姓':
        continue
    if name[0] in headKey:
        # 获取横坐标并定位至身高的位置,取值到字典中
        headAvg[name[0]] += sheet.cell(item.row, 3).value
        head[name[0]]+=1
    else:
        # 没有就创建
        headAvg[name[0]]=sheet.cell(item.row,3).value
        head[name[0]]=1


# 读取除了第一行的数据
for item in list(sh.rows)[1:]:
    # 空字典接收数据
    value_dict={}
    # len(item) 获取列数
    for index in range(len(item)):
        value_dict[title[index]] = item[index].value

    # 根据性别计算身高和
    if value_dict['性别']=="女":
        woman+=1
        womanHeight+=value_dict['身高']
    if value_dict['性别']=="男":
        man+=1
        manHeight+=value_dict['身高']

# 根据性别计算身高平均值
womanAvg=womanHeight/woman
manAvg=manHeight/man

# 给单元格赋值
sheet['E2'] = '男生平均身高'
sheet['E3'] = '女生平均身高'
sheet['F2'] = manAvg
sheet['F3'] = womanAvg

n=2
sheet['G1'] = '姓氏'
sheet['H1'] = '人数'
sheet['I1'] = '平均升高'
for key,value in head.items():
    sheet['G' + str(n)] = key
    sheet['H'+ str(n)] = value
    # 除法计算平均
    sheet['I' + str(n)] = headAvg[key]/head[key]
    n = n + 1


# 如果不确定自己的操作使用以下注释代码,相当于另存为的意思。
# wb.save('Test.xlsx')
# 保存,使用相对路径
wb.save('data.xlsx')


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值