一、数据获取
设置去向
import pandas as pd
import docx
clubs={
'俱乐部名称':['乒乓球','羽毛球','篮球','器械训练','足球','桌游','无人机','摄影','吉他']}
通过**星发起签到获取成员当日去向
读取签到数据,并设置姓名为索引
data=pd.read_excel('E:/编程/****.xlsx',encoding='utf-8')
data=data.set_index('1.姓名:')
读取人名单数据,并设置姓名为索引
num=pd.read_excel('E:/编程/人名单.xlsx')
num=num.set_index('1.姓名:')
合并数据
con=pd.concat([num,data],axis=1,sort=False)
'''
pd.concat(
objs, #要合并对象
axis=0,#选择合并轴 0按列合并 1按行合并
join='outer', #outer 并集 inner 交集
join_axes=None,#按照选定数据表的索引合并 合并后会切除其他数据表多余索引及数据
ignore_index=False, #False 按索引合并 True 新建索引0~n 按新索引合并合并后索引被重写
keys=None,
levels=None,
names=None,
verify_integrity=False,
copy=True
)
'''
#如果读取的签到的数据有重复会报错所以**星问卷需要设置为每人填写一次
二、数据处理并写入文档
获取日期
import datetime
date=datetime.datetime.now().strftime('%Y{y}%m{m}%d{d}').format(y='年',m='月',d='日')
#Y 年保留4为 y保留2位
新建文档
doc_all=docx.Document()
写入文档
para=doc_all.add_heading('', level=2)#添加段落
para.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT#设置段落左对齐
run = para.add_run(u'%S'%data)#将data写入文档
#设置字体
run.font.name = u'黑体'
run._element.rPr.rFonts.set(docx.oxml.ns.qn('w:eastAsia'), u'黑体')
获取未填写人员数据
lis=list(con[con['提交答卷时间'].isna()].index)
#con['提交答卷时间']提取'提交答卷时间'中的数据到一个series
#con['提交答卷时间'].isna()判断中数据是否非空
#con[con['提交答卷时间'].isna()]选择数据中为空的行
#con[con['提交答卷时间'].isna()].index获取选出数据的索引(姓名)到一个series
#list(con[con['提交答卷时间'].isna()].index)将series转化为list
for i in lis:
print(i,end=' ')
print('',end='\n')
获取俱乐部报名人数信息
coo=data.groupby('2.2021-02-01选报课程:|单选题|')['序号'].count()
#按去向分组并计数
cool1=list(coo.index)
#获取去向名称
cool2=list(coo.values)
#获取去向成员数
data2='选报课程 人次\n'
for a,b in zip(cool1,cool2):
data2=data2+a+' %d'%b+'\n'
print(data2)
获取各俱乐部报名具体信息
di=dict(list(data.groupby('2.2021-02-01选报课程:|单选题|',as_index=False)))
#按照俱乐部分组并转化为字典
for i,k in zip(clubs['俱乐部名称'],clubs['负责人']):
#通过zip可将分别存储的对应数据对应并引入循环
print(i+' 负责人:'+k+'\n成员:')
temp=list(di[i].index)
#获取名称为 i 的去向的成员
#print(type(temp))
for j in temp:
print(j,end=' ')
print('',end='\n')