点击蓝字关注我们
近期码农身边的几个同事对前面出的Python报表自动化的帖子都表示很实用,同事一度登上粉丝阅读榜的No1。不过最近很不好意思,两周都没更新文章了,给各位粉丝大人道个歉。主要是最近工作太忙,而且最近没想到什么实用内容分享给大家。
后来码农想到了去年年底的一件事情,背景是需要把一张工作表的数据按照省份拆分成不同的sheet,而且还要针对每个省份的数据做图。码农就想到这个案例很适合拿来作为今天分享的主题。
案例数据
今天的案例数据是一份近2年全国各省市的社会零售消费品增速的数据。具体如下
![1f8d913f23a5aa404641fe704a3f38e3.png](https://i-blog.csdnimg.cn/blog_migrate/bc7bcb27d96ed30866faae7edff16a23.png)
我们任务是需要把每个省的数据拆分到一个单独的sheet里,并且在Sheel里做图展示数据。
今天要用到的Python里的一个非常好用的模块——openpyxl,它是专门用来处理模块是一个读写Excel 2010文档的Python库。它可以通过Python代码来实现Excel的各种操作,包括数据的读写,Excel的格式修改,包括写入Excel的公式,还有作图功能,今天就给大家具体介绍下。
导入数据
导入数据还是使用第一篇帖子分享的read_excel的方法来导入我们的原始数据,代码如下:
import openpyxl
左右滑动查看完整代码
打开一个Excel文件
接下来,我们就在原始的数据表里进行数据的拆分和画图,首先是用openpyxl打开原始数据表。
#打开工作簿,将工作簿存入对象wb
选择一个省市的数据,这里先以“北京市”为例,后面我们将整个功能封装为一个函数:
'北京市'
下一步需要先生成一个新的Sheet并且按照省市名称命名,这里用到create_sheet这个函数:
ws=wb.create_sheet(prov)
然后我们把data这个数据写入到新的Sheet里,这里我们需要用到一个循环,用openpyxl写入数据的方法就是按照excel的单元格来操作,所以我们需要按照单元格做遍历,ws.cell(row,column)表示sheet里的单元格,row是行,column是列,都是从1开始计数的,不是0哦。
for i
Excel作图指令
接下来是最重要的画图部分了,这里展示画折线图和柱状图。
from openpyxl.chart import LineChart,BarChart,Reference
#绘图的数据所在区域
dat=Reference(ws,min_col=2,min_row=2,max_row=2,max_col=ws.max_column)
#绘图数据的类别
cat=Reference(ws,min_col=2,min_row=1,max_row=1,max_col=ws.max_column)
#实例化折线图
chart1 = LineChart()
#折线图的样式
chart1.style = 2
#图表名称
chart1.title = prov
#纵轴名称
chart1.y_axis.title = '社会零售消费品增速'
#横轴名称
chart1.x_axis.title = '季度'
#不展示图例
chart1.legend=None
#添加作图的数据,默认作图的数据是按列的,这里的数据是按行的,所以需要True
chart1.add_data(dat,from_rows=True)
#指定绘图数据的类别
chart1.set_categories(cat)
#在A4格作图
ws.add_chart(chart1,'A4')
#柱状图
chart2=BarChart()
chart2.style=4
chart2.title=prov
chart2.y_axis.title = '社会零售消费品增速'
chart2.x_axis.title = '季度'
chart2.legend=None
chart2.add_data(dat,from_rows=True)
chart2.set_categories(cat)
ws.add_chart(chart2,'J4')
左右滑动查看完整代码
这样就完成数据的拆分和作图了,最后我们将这个Excel另存一下:
r'E:\python_study\社会零售消费品增速_拆分.xlsx')
我们看下效果图。
最后我们只需要将上面从新建Sheet到画图这部分的代码定义为一个函数,然后执行一遍循环就可以完成这个任务了。
def new_sheet(prov):
左右滑动查看完整代码
这样我们就可以很方便的实现每个省的数据图表了。
好了,诸位表哥表姐,今天你们学会了?如果还是不懂,可以私信码农哦。
欢迎大家关注码农的公众号哦~~~~拜了个拜
如果你对报表自动化感兴趣,欢迎点击阅读前面的系列哦~~~
【Python报表自动化1】这是一篇可以让你从8点下班变成5点下班的武功秘籍
【Python报表自动化2】这是一篇可以让你从8点下班变成5点下班的武功秘籍
【Python报表自动化3】如何把vlookup函数用到666