添加legend python_【Python报表自动化4】把数据按省份拆分还要逐个作图该怎么办?...

点击蓝字关注我们

    近期码农身边的几个同事对前面出的Python报表自动化的帖子都表示很实用,同事一度登上粉丝阅读榜的No1。不过最近很不好意思,两周都没更新文章了,给各位粉丝大人道个歉。主要是最近工作太忙,而且最近没想到什么实用内容分享给大家。

    后来码农想到了去年年底的一件事情,背景是需要把一张工作表的数据按照省份拆分成不同的sheet,而且还要针对每个省份的数据做图。码农就想到这个案例很适合拿来作为今天分享的主题。

案例数据

    今天的案例数据是一份近2年全国各省市的社会零售消费品增速的数据。具体如下

5d1686d05c2c61bbd3918e8ff751f944.png

    我们任务是需要把每个省的数据拆分到一个单独的sheet里,并且在Sheel里做图展示数据。

    今天要用到的Python里的一个非常好用的模块——openpyxl,它是专门用来处理模块是一个读写Excel 2010文档的Python库。它可以通过Python代码来实现Excel的各种操作,包括数据的读写,Excel的格式修改,包括写入Excel的公式,还有作图功能,今天就给大家具体介绍下。

导入数据

    导入数据还是使用第一篇帖子分享的read_excel的方法来导入我们的原始数据,代码如下:

import openpyxl
import pandas as pd

df=pd.read_excel(r'E:\python_study\社会零售消费品增速.xlsx')
print(df.head(5))
       地区  2017年第二季度  2017年第三季度  2017年第四季度  2018年第一季度  2018年第二季度  2018年第三季度  \
0     北京市        5.6        5.4        5.2        4.7        4.4        4.1   
1     天津市        5.5        4.3        1.7        5.8        4.3        3.7   
2     河北省       10.6       10.8       10.7       10.6        9.7        9.5   
3     山西省        6.6        6.8        6.8        9.3        9.1        9.0   
4  内蒙古自治区        9.4        8.4        6.9        6.5        6.9        6.9   

   2018年第四季度  2019年第一季度  2019年第二季度  2019年第三季度  2019年第四季度  
0        2.7        3.8        5.4        4.8        4.4  
1        1.7       -2.6       -0.6       -1.4       -0.3  
2        9.0        8.4        8.9        8.4        8.4  
3        8.2        8.2        8.3        7.8        7.8  
4        6.3        4.9        4.0        4.0        4.1  

左右滑动查看完整代码

打开一个Excel文件

     接下来,我们就在原始的数据表里进行数据的拆分和画图,首先是用openpyxl打开原始数据表。

#打开工作簿,将工作簿存入对象wb
wb=openpyxl.load_workbook(r'E:\python_study\社会零售消费品增速.xlsx')  

    选择一个省市的数据,这里先以“北京市”为例,后面我们将整个功能封装为一个函数:

prov='北京市'
data=df[df['地区']==prov]
print(data)
    地区  2017年第二季度  2017年第三季度  2017年第四季度  2018年第一季度  2018年第二季度  2018年第三季度  \
0  北京市        5.6        5.4        5.2        4.7        4.4        4.1   

   2018年第四季度  2019年第一季度  2019年第二季度  2019年第三季度  2019年第四季度  
0        2.7        3.8        5.4        4.8        4.4  

    下一步需要先生成一个新的Sheet并且按照省市名称命名,这里用到create_sheet这个函数:

ws=wb.create_sheet(prov)

    然后我们把data这个数据写入到新的Sheet里,这里我们需要用到一个循环,用openpyxl写入数据的方法就是按照excel的单元格来操作,所以我们需要按照单元格做遍历,ws.cell(row,column)表示sheet里的单元格,row是行,column是列,都是从1开始计数的,不是0哦。

for i in range(data.columns.shape[0]):
    ws.cell(row=1,column=i+1).value=data.columns[i]#写入列名称
    ws.cell(row=2,column=i+1).value=data.iloc[0,i]#写入data里的数据项

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另存一下:

wb.save(r'E:\python_study\社会零售消费品增速_拆分.xlsx')

    我们看下效果图。

f06126d598effad015cea8443f72003f.png

    最后我们只需要将上面从新建Sheet到画图这部分的代码定义为一个函数,然后执行一遍循环就可以完成这个任务了。

def new_sheet(prov):
    data=df[df['地区']==prov]

    ws=wb.create_sheet(prov)

    for i in range(data.columns.shape[0]):
        ws.cell(row=1,column=i+1).value=data.columns[i]
        ws.cell(row=2,column=i+1).value=data.iloc[0,i]

    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')
for i in df['地区']:
    new_sheet(i)

左右滑动查看完整代码

    这样我们就可以很方便的实现每个省的数据图表了。

6ed4223cd11c0008a4f10ac50a0e772d.png

    好了,诸位表哥表姐,今天你们学会了?如果还是不懂,可以私信码农哦。

    欢迎大家关注码农的公众号哦~~~~拜了个拜

e7c52d160daecf249f57cc3cc4dff926.png

如果你对报表自动化感兴趣,欢迎点击阅读前面的系列哦~~~

【Python报表自动化1】这是一篇可以让你从8点下班变成5点下班的武功秘籍

【Python报表自动化2】这是一篇可以让你从8点下班变成5点下班的武功秘籍

【Python报表自动化3】如何把vlookup函数用到666

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值