python读取excel数据做分类统计
某excel中记录了某个人的通话记录,下面程序将按照通话地点,通话类型等统计通话时间
# -*- coding:utf-8 -*- import xlrd import datetime infos=[] info_file=xlrd.open_workbook(\'src.xls\')#打开excel文件 info_sheet=info_file.sheets()[0]#通过索引顺序获取工作表 row_count=info_sheet.nrows#获取行数,列数ncols for row in range(1,row_count): time_string=info_sheet.cell(row,3).value time_s_sp=time_string.split(\':\') infos.append(#该数组里放了row_count个字典 { \'type\':info_sheet.cell(row,2).value,#获取单元格,通话类型,主叫被叫 \'other_cellphone\':info_sheet.cell(row,0).value,#对方号码, \'timespan\':datetime.timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])), \'gpscity\':info_sheet.cell(row,5).value#通话是本地还是外地 } ) time_all=datetime.timedelta(seconds=0)#初始化 time_types={} time_classes={} time_numbers={} for infor in infos:#取出该数组里的字典 time_all +=infor[\'timespan\']#求总通话次数 infor_type=infor[\'type\'] if infor_type in time_types: time_types[infor_type]+=infor[\'timespan\'] else: time_types[infor_type]=infor[\'timespan\']#按通话类型统计通话时间 infor_class=infor[\'gpscity\'] if infor_class in time_classes: time_classes[infor_class]+=infor[\'timespan\'] else: time_classes[infor_class]=infor[\'timespan\']#这里相当于先分类赋值再++,按归属地统计通话时间 infor_number=infor[\'other_cellphone\'] if infor_number in time_numbers: time_numbers[infor_number]+=infor[\'timespan\'] else: time_numbers[infor_number]=infor[\'timespan\']#根据号码统计通话时间 print \'总通话时间:%s\' % time_all print print \'总通话方式分类\' for k,v in time_types.items(): print k.encode(\'utf-8\'),v print print \'通话类型分类:\' for k,v in time_classes.items(): print k.encode(\'utf-8\'),v print print \'对方号码分类:\' for k,v in time_numbers.items(): print k,v
再优化下代码
# -*- coding:utf-8 -*- import xlrd from datetime import timedelta def read_excel(file_excel):#读excel并将需要的数据分类放在数组里 infos=[] info_file=xlrd.open_workbook(file_excel) info_sheet=info_file.sheets()[0] row_count=info_sheet.nrows for row in range(1,row_count): time_string=info_sheet.cell(row,3).value time_s_sp=time_string.split(\':\') infos.append( { \'type\':info_sheet.cell(row,2).value, \'other_cellphone\':info_sheet.cell(row,0).value, \'timespan\':timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])), \'gpscity\':info_sheet.cell(row,5).value } ) return infos def count_cell(list_dirs,infotype):#统计总通话及分类统计结果,存在字典里 result_dir={} time_all=timedelta(seconds=0) for list_dir in list_dirs: time_all +=list_dir[\'timespan\'] info_type = list_dir[infotype] if info_type not in result_dir: result_dir[info_type]=list_dir[\'timespan\'] else: result_dir[info_type]+=list_dir[\'timespan\'] return time_all,result_dir def print_result(result_dir):#打印数据 for k,v in result_dir.items(): print k.encode(\'utf-8\'),v if __name__=="__main__": list_dirs=read_excel(\'src.xls\') time_all,result_type=count_cell(list_dirs,\'type\') result_cell=count_cell(list_dirs,\'other_cellphone\') result_gpscity = count_cell(list_dirs, \'gpscity\') print \'总通话时间:%s\' % time_all print \'按照通话类型分类:\' print_result(result_type) print \'按照号码分类:\' print_result(result_cell[1]) print \'按照归属地分类:\' print_result(result_gpscity[1])
版权声明:本文为facexiaoxi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。