如何利用python整合excel_如何使用Python处理Excel

编程应该作为必修加入小学生课程表,这是思维方式的锻炼。

——沃·兹基朔德(借梗)

离开代码也有快两年了。期间其实一直有重新拾起的想法,只是没有模板刺激的动力,加上又懒…

刚好这段时间项目进入一个阶段,一方面需要对上个阶段的产品进行数据分析和整理,另一方面多了一些空闲时间,借此机会学习学习Python。

1. 需求

BI给的数据报表比较原始,在excel里以多个sheet的形式出现,且对应的指标使用的是开发变量名称,可读性较差。

当前目标是通过Python读取BI生成的数据日报,然后以日期为横轴,数据指标为纵轴重新输出一份可读性强报表。

2. 流程

第一步,安装环境

关键词:Mac+Python安装

Mac上其实自带Python,但是好像有一些问题。现在安装Python很方便,有完全自动化的处理方式。

教程:https://stringpiggy.hpd.io/mac-osx-python3-dual-install/

第二步,Python的能力

关键词:Python + Excel处理

编程语言大道万千殊途同归,由于已有编程基础,Python作为脚本语言语法也比较简单,因此准备直接从实际项目开始学习。

首先思考的是,Python作为知名的「擅长数据处理」的语言,是否支持处理Excel表格(肯定是支持的…那是否需要额外安装一些库呢?)。

答案是需要。不过已经有不少库能够做到这件事,我本次是根据教程选择的xlrd(表格读取)和xlwt(表格输出)

接下来要做的事情是读取Excel和重新生成Excel。

教程:http://blog.csdn.net/cloudox_/article/details/53812213

直接复制教程代码,在Terminal中运行测试。

成功~而且代码注释已经十分完善,根据函数名称、变量名称和注释,能够很清晰的理解Excel库的工作原理。

第三步,处理简单的数据日报Sheet

关键词:活学活用

了解了基础的Excel行列读取操作后,就可以直接进入正题了。

第一个Sheet很简单,3列数据分别是日期、UV、PV。导出的表中有最近七天的数据。

这个Sheet的结构和教程一模一样,因此只需要在教程代码的基础上修改变量名称就能够实现输出。

20170901120949_356.jpg

第四步,整理纵向表

关键词:'合并+过滤'

数据日报有很多Sheet,其中可以分为两种结构。

第一种是和教程结构一样,第一列是时间,每一行代表每一天的数据。

20170901120955_842.jpg

第二种是横向的,每一行代表今天某项目的各组数据。

20170901121000_371.jpg

从简到难,先把第一类的Sheet搞定。刚刚已经成功解决了一个Sheet,剩下的只需要类似处理即可。但是这里又有一个问题——为了方便阅读,我需要把各个表的数据导出到一个表里,避免反复切换的情况。

解决:这个操作其实非常简单,我们只需要把「读取表-生成表」这个流程修改为「读取表-读取表-读取表……-生成表」即可,即在最后一个表的数据读取完之前,所有的数据线先存在一个列表里不输出,等最后读取结束后再统一输出。

问题:此时会遇到一个问题,因为在原表中,每一个Sheet的第一列都是时间。这样生成的新表就会多出很多重复列。事实上我们只需要第一列时间——也就是过滤第一个表之后所有表的第一列数据。

20170901121005_670.jpg

解决:根据表结构可以很容易就能想到,只要在第一个表之后,每次都从第二列开始读取,就能够过滤多余的时间列。

问题:数据日报在生成第一类结构的数据时,事实上是会给出7天内的所有数据。那么在之后其实我只需要当日数据即可,如何过滤掉不需要的数据呢?

解决:过滤日期,也就是说「只需要第一列是今天的数据」。代码处理数据的逻辑是从左到右从上到下——也就是说一行一行的处理。那我们要做的事情就是,当发现本行数据的第一列(日期列)的值不等于今天的时候,就直接忽略此行(不添加到存储列表里)。

注意咯,由于我们在上一个问题中忽略了第一个表之后的日期列,在这个问题中我们需要重新使用此列进行判断——当然,无论本行是否是今日数据,日期列仍然不会输出到存储列表中。

为了方便处理,我们使用一个today变量输入今天的时间(未来可以自动获取)。

20170901121011_234.jpg

第一类纵向表格处理起来比较简单,都是在教程代码的基础上修改完成。

第二类表格的处理方法我们下次再说。

对了,Python有个重要的地方是字符编码问题,当使用中文字符串时,请务必前面加一个关键字u,代表Unicode编码,否则会出现读取错误。

20170901121017_216.png

作为一篇比以往更流水账的文章,其实目的只是为了重启「写作」这个动作。

之前因为想要追求较高的文稿质量,导致时间花费太多,一旦没有时间就状态中断。这次重启计划其实没有什么预期,只是临时决定然后想要不拖延一次而已。

无论如何,在没有写作能力的阶段,写下来,肯定比写得好更重要。

不要排版,不要质量,试试能够坚持多久。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值