
【第一步 引入所需模块】
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()

被折叠的 条评论
为什么被折叠?



