【第一步 引入所需模块】
import pandas as pd #用来读Excel import time #用来生成时间标签 import matplotlib.pyplot as plt #用来生成图
【第二步 把sheet页名保存为列表】
day= time.strftime('%Y-%m-%d',time.localtime()) #规定时间格式 OriData=r'I:\Mest Inc\1202\terminal_1202.xlsx' #读取Excel文件 SheetList = [] for x in pd.read_excel(OriData,sheet_name=None).keys(): SheetList.append(x)
pandas读出来的sheet名字为dict_keys(['个人收入来源']),需要修成列表格式,列表是我最喜欢用的东东。SheetList为['个人收入来源'],用来多个sheet名的列表。
【第三步 把表格需要处理的列整理成标准列表 】
j = 0 TerBd=[] TerMd=[] TerMdCt=[] TerBdOri= pd.read_excel(OriData, sheet_name=SheetList[j], usecols=[0], names=None).values.tolist() TerMdCtOrigin=pd.read_excel(OriData, sheet_name=SheetList[j], usecols=[1], names=None).values.tolist() for x in TerBdOri: TerBd.append(x[0]) for x in TerMdCtOrigin: TerMdCt.append(x[0]) TerMdE = [str(x).strip() for x in TerMd if str(x).strip() != ''] TerBdE = [str(x).strip() for x in TerBd if str(x).strip() != '']
【第四步 把收入来源列的索引保存成列表,可以看到重复次数】
dupli=[] for x in TerBdE: dupli.append(TerBdE.index(x))
【第五步 最关键的一步 用字典把收入来源和金额关联起来 】
BrdCt = {} for Brd_index, BrdCt_index in enumerate(dupli): if BrdCt_index not in BrdCt.keys(): #收入来源第一次出现,增加索引 BrdCt[BrdCt_index] = [TerMdCt[Brd_index]] else: BrdCt.get(BrdCt_index).append(TerMdCt[Brd_index]) #第二次或者N次直接添加在第一个索引列表里 BrdCtE = sorted(BrdCt.items(),key=lambda x:sum(x[1]),reverse=True) #字典按照金额大小排序
【第六步 生成饼图】
PieSr=[] PieLb=[] for x in BrdCtE: if sum(x[1])>90000: PieLb.append(TerBdE[x[0]]) PieSr.append(sum(x[1])) OTHERS=sum(TerMdCt)-sum(PieSr) PieSr.append(OTHERS) PieLb.append('OTHERS') print(PieSr) plt.rcParams['font.sans-serif']=['SimHei'] #显示中文 plt.rcParams['axes.unicode_minus']=False #显示负号 plt.xticks(rotation=25) plt.pie(PieSr,labels=PieLb,autopct='%.2f%%',explode=(0,0,0.2,0,0,0,0,0),shadow=True) plt.title('个人收入来源分布'+day) plt.show()