Python培训
美国上市Python培训机构

400-111-8989

热门课程

如何使用Python处理Excel

  • 发布: 觅食先生
  • 来源: 觅食先生
  • 时间:2017-09-01 12:10

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

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

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

刚好这段时间项目进入一个阶段,一方面需要对上个阶段的产品进行数据分析和整理,另一方面多了一些空闲时间,借此机会学习学习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的结构和教程一模一样,因此只需要在教程代码的基础上修改变量名称就能够实现输出。

第四步,整理纵向表

关键词:'合并+过滤'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

预约申请免费试听课

上一篇:用Python验证你的策略吧!——Zipline回测
下一篇:Python学习之路-开发工具安装

很强!用Python实现3D建模!

Python系统学习流程图,教你一步步学习python

Python IDE推荐7个你可能会错过的Python IDE

python工程师常用的开发工具,是这三个!

选择城市和中心
贵州省

广西省

海南省