请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
搜索
热搜: Excel discuz
查看: 1635|回复: 0

[《从excel到python》笔记案例] 字符串统计案例--统计各等级出现的次数

[复制链接]

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750848
发表于 2022-1-26 14:27:14 | 显示全部楼层 |阅读模式
2022-01-26_142222.png
红色框内为处理后的数据
需求:根据分数列,统计每个人获取优良中差的次数,写入C列
思路:循环B列数据,拿到每个数据,并在数据内循环计算优良中差每个等级的次数,并叠加字符串。知识点:本案例,字符串相加是关键。
下面是书中所示代码,利用的while循环实现
  1. import xlrd #导入读取xls文件的库。
  2. from xlutils.copy import copy #导入复制工作簿的函数。
  3. wb=xlrd.open_workbook('Chapter-4-6-1.xls') #读取工作簿。
  4. ws=wb.sheet_by_name('分数表') #读取工作表。
  5. nwb=copy(wb) #复制工作簿产生一个副本。
  6. nws=nwb.get_sheet('分数表') #读取副本工作簿中的工作表。
  7. row_num=0 #初始化row_num变量为0。
  8. txt='' #初始化txt变量为空。
  9. while row_num<ws.nrows-1: #当row_num变量小于已使用单元格区域行数时。
  10.     row_num +=1 #则对row_num变量累加1。
  11.     score=ws.cell_value(row_num,1) #获取B列单元格的值。
  12.     for level in '优良中差': #循环'优良中差'4个等级。
  13.         lev_sco='{}:{}\t'.format(level,score.count(level)) #统计每个级别的个数,并进行格式化。
  14.         txt +=lev_sco #累积连接各等级数量。
  15.     nws.write(row_num,2,txt) #将统计结果写入C列单元格。
  16.     txt='' #重新初始化txt变量,便于存储下个单元格各等级的统计结果。
  17. nws.write(0,2,'等级统计') #在C列写入表头。
  18. nwb.save('Chapter-4-6-1.xls') #保存副本工作簿。
复制代码
我自己利用for循环又写一遍,图中效果是下面代码运行所得
  1. import xlrd
  2. from xlutils.copy import copy
  3. wb = xlrd.open_workbook('Chapter-4-6-1.xls')
  4. ws = wb.sheet_by_index(0)
  5. nwb = copy(wb)
  6. nws = nwb.get_sheet('分数表')
  7. for row in range(1,ws.nrows):
  8.     txt = ''
  9.     info = ws.cell_value(row,1)
  10.     for j in '优良中差':
  11.         num = info.count(j)
  12.         a = f'{j}:{num};'
  13.         txt = txt+a
  14.     nws.write(row,2,txt)
  15. nwb.save('s.xls')
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五花八门论坛 ( 豫ICP备15031300号-3 )

GMT+8, 2024-4-17 02:20 , Processed in 0.101620 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表