斑马救援出勤统计代码
内容来源于更早的一篇帖子 http://zhaoqianzhou.com/forum.php?mod=viewthread&tid=261&extra=page%3D6from openpyxl import Workbook #导入Excel模块
wb = Workbook() #创建一个Excel文件
sheet = wb.active #获取当前sheet名称
sheet.title = "第一个sheet" #修改sheet名称
sheet['A1']= "姓名" #在A1 B1单元格输入内容
sheet['B1']= "次数"
import pandas as pd #导入pandas库,读csv用的
pd = pd.read_csv('002.csv',encoding='utf-8') #打开csv文件,读取内容
alllist = '、'.join(pd['参与人员']) #用顿号拼接人员一列
wordlist = list(alllist.split('、')) #转成列表格式,以顿号为识别分割符
print(wordlist) #打印列表格式
wordset = set(wordlist) #去掉重复内容
newlist = [] #创建空列表来存储姓名和次数
for word in wordset:
freq = wordlist.count(word) #计算出现次数
sheet.append() #把内容添加到sheet
newlist.append() #把内容加入空列表
newlist = sorted(newlist,key=lambda k:k,reverse=True)#给列表排序
wb.save( "测试3.xlsx")
print(newlist)
最新积分细则代码,目前处于测试阶段
# 导入excel模块,
from openpyxl import Workbook #导入Excel模块
wb = Workbook() #创建一个Excel文件
sheet = wb.active #获取当前sheet名称
sheet.title = "斑马救援积分明细" #修改sheet名称
sheet['A1']= "姓名" #在A1 B1单元格输入内容
sheet['B1']= "分数"
# 导入pandas库,读取表格
import pandas as pd
#pd = pd.read_csv('002.csv',encoding='utf-8') #打开csv文件,读取内容
pd = pd.read_excel('002.xlsx') #打开excel文件,读取内容
#分别拿出参与人员和出勤类型数据,为创建元组做准备
alllist = ','.join(pd['参与人员']) #用逗号拼接人员一列,此处生成不是列表,是字符串
alllist = list(alllist.split(',')) #把上一步的字符串转成列表格式,以逗号为识别分割符
classlist = '、'.join(pd['出勤类型']) #拼接出勤类型成字符串
classlist = list(classlist.split('、')) #把拼接出来的字符串转成列表
dalist = [] #创建一个空列表存放所有的姓名(重复姓名都在这里边)
b = [] #创建空列表存放去重后的姓名
# 创建元组,让出勤类型和出勤人员一一对应
zidian = zip(classlist,alllist)
# 循环元组内容,判断哪种类型应该积分多少
for i in list(zidian):
if i == '第一类1分':
dalist.append(i.split('、'))
elif i == '第二类2分':
dalist.append(i.split('、')*2)
elif i == '第三类3分':
dalist.append(i.split('、')*3)
#这一步,把大列表里面嵌套的小列表,全部清空,只把姓名拿出来放到一个列表b里
for a in dalist:
b.extend(a)
name = set(b) #人员去重,每个名字只留下一个
newlist = [] #创建空列表来存储姓名和次数
for word in name:
freq = b.count(word) #计算出现次数
sheet.append() #把内容添加到sheet
newlist.append() #把内容加入空列表
newlist = sorted(newlist,key=lambda k:k,reverse=True)#给列表排序
wb.save( "积分明细.xlsx")
print(newlist)
相比于楼上,增加了excel行数的读取,和处理数据的计算,通过对比两个数字,来判断是否全部数据都处理完。
# 导入openpy模块,操作最后一步导出excel
from openpyxl import Workbook #导入Excel模块
wb = Workbook() #创建一个Excel文件
sheet = wb.active #获取当前sheet名称
sheet.title = "斑马救援积分明细" #修改sheet名称
sheet['A1']= "姓名" #在A1 B1单元格输入内容
sheet['B1']= "分数"
# 导入pandas库,读取表格
import pandas as pd
#pd = pd.read_csv('002.csv',encoding='utf-8') #打开csv文件,读取内容
pd = pd.read_excel('全部记录.xlsx') #打开excel文件,读取内容
linesnum = pd.index.stop #excel数据行数
#分别拿出参与人员和出勤类型数据,为创建元组做准备
alllist = ','.join(pd['参与人员']) #用逗号拼接人员一列,此处生成不是列表,是字符串
alllist = list(alllist.split(',')) #把上一步的字符串转成列表格式,以逗号为识别分割符
classlist = '、'.join(pd['积分类型']) #拼接出勤类型成字符串
classlist = list(classlist.split('、')) #把拼接出来的字符串转成列表
x = 0 #储存处理数据的数目
dalist = [] #创建一个空列表存放所有的姓名(重复姓名都在这里边)
b = [] #创建空列表存放去重后的姓名
# 创建元组,让出勤类型和出勤人员一一对应
zidian = zip(classlist,alllist)
# 循环元组内容,判断哪种类型应该积分多少
for i in list(zidian):
if i == '1分':
dalist.append(i.split('、'))
x = x + 1
elif i == '2分':
dalist.append(i.split('、')*2)
x = x + 1
elif i == '3分':
dalist.append(i.split('、')*3)
x = x + 1
else:
print(f'积分类型为{i}的数据有问题')
#这一步,把大列表里面嵌套的小列表,全部清空,只把姓名拿出来放到一个列表b里
for a in dalist:
b.extend(a)
name = set(b) #人员去重,每个名字只留下一个
newlist = [] #创建空列表来存储姓名和次数
for word in name:
freq = b.count(word) #计算出现次数
sheet.append() #把内容添加到sheet
newlist.append() #把内容加入空列表
newlist = sorted(newlist,key=lambda k:k,reverse=True)#给列表排序
#用excel行数对比处理的数据,如果一样就说明全部数据已经处理完,如果不同,就说明有的数据没有处理
if linesnum == x:
print(f'数据处理完毕,共{linesnum}条记录')
print(newlist)
wb.save("积分明细.xlsx")
else:
print(f'共有数据{linesnum},已经处理{x}条,请排查数据')
页:
[1]