元进Python(5)---个人收入来源饼图实现代码解读

【第一步 引入所需模块】

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值