python 使用pandas库分析加班数据

因为每个月会分析部门内部各个小团队的平均加班时长,以评估大家的工作量,每次手工分析纯粹是重复逻辑工作,做多了之后便觉得枯燥无味。于是想到了利用python写一个脚本来解放自己。

#coding:utf-8

from openpyxl  import Workbook

from openpyxl  import load_workbook

from pandas import Series,DataFrame

import pandas as pd

import numpy as np,pandas as pd

import xlrd

df = pd.read_excel(r'E:\pythonstudy\excel\data\sample.xlsx','Worksheet',encoding='gbk')

#print(df[u'加班时长(分)'])

#df01 = pd.read_excel(r'E:\pythonstudy\excel\data\9.et','Worksheet',encoding='gbk')

total_OT = df[u'加班时长(分)'].sum()  #计算加班时长列的总和

print(total_OT)

df_name = df[u'姓名'].drop_duplicates() #剔除姓名的重复数据

df_name_total = df_name.count()  #统计部门总人数

print('total_num:',df_name_total)

team_dz_cp01 = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试一组']  #按小组筛选数据

team_dz_cp01_OT = team_dz_cp01[u'加班时长(分)'].sum() #产品测试一组加班时长统计

print(team_dz_cp01_OT)

name_dz_cp01 = team_dz_cp01[u'姓名'].drop_duplicates() #XX测试一组按姓名剔除重复数据

name_dz_cp01_num = name_dz_cp01.count()  #统计XX测试一组人数

print(name_dz_cp01_num)

team_dz_cp02 = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试二组'] #按小组筛选数据

team_dz_cp02_OT = team_dz_cp02[u'加班时长(分)'].sum()  #筛选出的小组数据中,按加班时长列求和,统计加班时长

print(team_dz_cp02_OT)

name_dz_cp02 = team_dz_cp02[u'姓名'].drop_duplicates()

name_dz_cp02_num = name_dz_cp02.count()  #统计XX测试二组人数

print(name_dz_cp02_num)

team_dz_yy = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_dz_yy_OT = team_dz_yy[u'加班时长(分)'].sum()

print(team_dz_yy_OT)

name_dz_yy = team_dz_yy[u'姓名'].drop_duplicates()

name_dz_yy_num = name_dz_yy.count() - 1    #统计XX测试组人数,减掉一个休产假人员

print('yy:',name_dz_yy_num)

team_dz_xxm = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_dz_xxm_OT = team_dz_xxm[u'加班时长(分)'].sum()

print(team_dz_xxm_OT)

name_dz_xxm = team_dz_xxm[u'姓名'].drop_duplicates()

name_dz_xxm_num = name_dz_xxm.count()    #统计XX测试组人数

print(name_dz_xxm_num)

team_dz_gj = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_dz_gj_OT = team_dz_gj[u'加班时长(分)'].sum()

print(team_dz_gj_OT)

name_dz_gj = team_dz_gj[u'姓名'].drop_duplicates()

name_dz_gj_num = name_dz_gj.count()    #统计XX测试组人数

print(name_dz_gj_num)

#XX休产假

team_dz_leader = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部']

team_dz_leader_OT= team_dz_leader[u'加班时长(分)'].sum()  #由于休产假,加班时长为Nan

print('dz leader',team_dz_leader_OT)

name_dz_leader = team_dz_leader[u'姓名'].drop_duplicates()

name_dz_leader_num = name_dz_leader.count() - 1  #休产假,人数减1

print(name_dz_leader_num)

team_dz_OT = sum([team_dz_cp01_OT,team_dz_cp02_OT,team_dz_xxm_OT,team_dz_gj_OT,

team_dz_yy_OT])  #XX测试部加班时长统计

print(team_dz_OT)

team_dz_num = sum([name_dz_gj_num,name_dz_xxm_num,name_dz_yy_num,name_dz_cp02_num,

name_dz_cp01_num],name_dz_leader_num)  #XX测试部人数统计

print(team_dz_num)

team_qp_dfqp = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_qp_dfqp_OT = team_qp_dfqp[u'加班时长(分)'].sum()

print(team_qp_dfqp_OT)

name_qp_dfqp = team_qp_dfqp[u'姓名'].drop_duplicates()

name_qp_dfqp_num = name_qp_dfqp.count()    #统计XX测试组人数

print(name_qp_dfqp_num)

team_qp_jg = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_qp_jg_OT = team_qp_jg[u'加班时长(分)'].sum()

print(team_qp_jg_OT)

name_qp_jg = team_qp_jg[u'姓名'].drop_duplicates()

name_qp_jg_num = name_qp_jg.count()    #统计XX测试组人数

print(name_qp_jg_num)

team_qp_ljf = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_qp_ljf_OT = team_qp_ljf[u'加班时长(分)'].sum()

print(team_qp_ljf_OT)

name_qp_ljf = team_qp_ljf[u'姓名'].drop_duplicates()

name_qp_ljf_num = name_qp_ljf.count()    #统计XX测试组人数

print(name_qp_ljf_num)

team_qp_jd = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_qp_jd_OT = team_qp_jd[u'加班时长(分)'].sum()

print(team_qp_jd_OT)

name_qp_jd = team_qp_jd[u'姓名'].drop_duplicates()

name_qp_jd_num = name_qp_jd.count()    #统计XX测试组人数

print(name_qp_jd_num)

team_qp_gg = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部/XX测试组']

team_qp_gg_OT = team_qp_gg[u'加班时长(分)'].sum()

print(team_qp_gg_OT)

name_qp_gg = team_qp_gg[u'姓名'].drop_duplicates()

name_qp_gg_num = name_qp_gg.count()    #统计XX测试组人数

print(name_qp_gg_num)

team_qp_leader = df[df[u'所在中心'] == u'XX事业部/测试部/XX测试部']

team_qp_leader_OT = team_qp_leader[u'加班时长(分)'].sum()

print(team_qp_leader_OT)

name_qp_leader = team_qp_leader[u'姓名'].drop_duplicates()

name_qp_leader_num = name_qp_leader.count()

print(name_qp_leader_num)

team_qp_OT = sum([team_qp_leader_OT,team_qp_dfqp_OT,team_qp_jg_OT,team_qp_gg_OT,

team_qp_ljf_OT,team_qp_jd_OT]) #XX测试部加班时长总和

print(team_qp_OT)

team_qp_num = sum([name_qp_jg_num,name_qp_gg_num,name_qp_jd_num,name_qp_ljf_num,

name_qp_leader_num,name_qp_dfqp_num])  #XX测试部人数统计

team_zdh = df[df[u'所在中心'] == u'XX事业部/测试部/XX开发组']

team_zdh_OT = team_zdh[u'加班时长(分)'].sum()

print(team_zdh_OT)

name_zdh = team_zdh[u'姓名'].drop_duplicates()

name_zdh_num = name_zdh.count()  #统计XX测试组人数

print(name_zdh_num)

date = df[df[u'工作类型'] == u'工作日']  #筛选工作日天数

date01 = date[u'日期'].drop_duplicates() #去掉工作日天数中的重复数据

date_num = date01.count()                #工作类型为工作日的数据统计

print(date_num)

#判断当月是否有法定节假日

#re = df[u'加班时长(分)'].isnull().count()  #统计备注列表为空值的数量,isnull()函数没有发挥作用(why?)

re = sum(df[u'备注'].isnull())      #统计备注列表为空值的数量

print('re:',re)

re_list = df[u'姓名'].count()      #统计任意列的总行数

print('re_list:',re_list)

if re ==re_list:            #判断备注列表的空值数量是否等于总行数,是,则没有法定节假日

#re = df[u'备注'].isnull()  #统计备注列表为空值的数量

#if True in re:            #只能判断备注列表中包含空值,计算结果不准确

date_fd_num = 0        #当月法定节假日为0

else:

date_fd = df[df[u'备注'] == u'法定节假日']  #筛选法定节假日

date_fd01 = date_fd[u'日期'].drop_duplicates()

date_fd_num = date_fd01.count()  #工作类型为法定节假日的数据统计

print(date_fd_num)

data_total = date_num - date_fd_num  #计算当月的工作日天数

print('workday:',data_total)

wb = load_workbook(r'E:\pythonstudy\excel\data\sample.xlsx')  #加载excel表

print wb.get_sheet_names()  #打印各表的表名

ws3 = wb.create_sheet("sheet2")  #创建新表

ws3["A1"] = '部门'

ws3["B1"] = '加班总和'          #单元格赋值

ws3["C1"] = '人数'

ws3["D1"] = '工作日天数'

ws3["E1"] = '平均加班时长(分)'

ws3.column_dimensions['A'].width = 30  #设置列宽

ws3.column_dimensions['B'].width = 10

ws3.column_dimensions['C'].width = 10

ws3.column_dimensions['D'].width = 20

ws3.column_dimensions['E'].width = 20

ws3["A2"] = '测试部'

ws3["A3"] = 'XX测试部'

ws3["A4"] = 'XX测试部\XX测试一组'

ws3["A5"] = 'XX测试部\XX测试二组'

ws3["A6"] = 'XX测试部\XX测试组'

ws3["A7"] = 'XX测试部\XX测试组'

ws3["A8"] = 'XX测试部\XX测试组'

ws3["A9"] = 'XX测试部'

ws3["A10"] = 'XX测试部\XX棋牌测试组'

ws3["A11"] = 'XX测试部\XX测试组'

ws3["A12"] = 'XX测试部\XX测试组'

ws3["A13"] = 'XX测试部\XX测试组'

ws3["A14"] = 'XX测试部\XX测试组'

ws3["A15"] = 'XX开发组'

ws3['B2'] = total_OT

ws3['B3'] = team_dz_OT

ws3['B4'] = team_dz_cp01_OT

ws3['B5'] = team_dz_cp02_OT

ws3['B6'] = team_dz_yy_OT

ws3['B7'] = team_dz_xxm_OT

ws3['B8'] = team_dz_gj_OT

ws3['B9'] = team_qp_OT

ws3['B10'] = team_qp_dfqp_OT

ws3['B11'] = team_qp_jg_OT

ws3['B12'] = team_qp_ljf_OT

ws3['B13'] = team_qp_jd_OT

ws3['B14'] = team_qp_gg_OT

ws3['B15'] = team_zdh_OT

ws3['C2'] = df_name_total

ws3['C3'] = team_dz_num    #未去掉休产假人数

ws3['C4'] = name_dz_cp01_num

ws3['C5'] = name_dz_cp02_num

ws3['C6'] = name_dz_yy_num

ws3['C7'] = name_dz_xxm_num

ws3['C8'] = name_dz_gj_num

ws3['C9'] = team_qp_num

ws3['C10'] = name_qp_dfqp_num

ws3['C11'] = name_qp_jg_num

ws3['C12'] = name_qp_ljf_num

ws3['C13'] = name_qp_jd_num

ws3['C14'] = name_qp_gg_num

ws3['C15'] = name_zdh_num

ws3['D2'] = data_total                #同一列表赋相同值,需要找寻更简单的方法

ws3['D3'] = data_total

ws3['D4'] = data_total

ws3['D5'] = data_total

ws3['D6'] = data_total

ws3['D7'] = data_total

ws3['D8'] = data_total

ws3['D9'] = data_total

ws3['D10'] = data_total

ws3['D11'] = data_total

ws3['D12'] = data_total

ws3['D13'] = data_total

ws3['D14'] = data_total

ws3['D15'] = data_total

ws3['E2'] = ws3['B2'].value//ws3['C2'].value//ws3['D2'].value #计算平均加班时长,且除取整数

ws3['E3'] = ws3['B3'].value//ws3['C3'].value//ws3['D3'].value

ws3['E4'] = ws3['B4'].value//ws3['C4'].value//ws3['D4'].value

ws3['E5'] = ws3['B5'].value//ws3['C5'].value//ws3['D5'].value

ws3['E6'] = ws3['B6'].value//ws3['C6'].value//ws3['D6'].value

ws3['E7'] = ws3['B7'].value//ws3['C7'].value//ws3['D7'].value

ws3['E8'] = ws3['B8'].value//ws3['C8'].value//ws3['D8'].value

ws3['E9'] = ws3['B9'].value//ws3['C9'].value//ws3['D9'].value

ws3['E10'] = ws3['B10'].value//ws3['C10'].value//ws3['D10'].value

ws3['E11'] = ws3['B11'].value//ws3['C11'].value//ws3['D11'].value

ws3['E12'] = ws3['B12'].value//ws3['C12'].value//ws3['D12'].value

ws3['E13'] = ws3['B13'].value//ws3['C13'].value//ws3['D13'].value

ws3['E14'] = ws3['B14'].value//ws3['C14'].value//ws3['D14'].value

ws3['E15'] = ws3['B15'].value//ws3['C15'].value//ws3['D15'].value

wb.save('E:\pythonstudy\excel\data\sample01.xlsx')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容