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

news/2024/7/7 19:32:39

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

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

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

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

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

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

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

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


http://www.niftyadmin.cn/n/2610695.html

相关文章

Android的 ViewPager 学习笔记

说明&#xff1a; ViewPager用于实现多页面的切换效果&#xff0c;该类存在于Google的兼容包里面&#xff0c;所以在引用时记得在BuilldPath中加入“android-support-v4.jar” 主布局文件 main.xml <?xml version"1.0" encoding"utf-8"?> <Line…

mvc中Scripts.Render的用法

&#xfeff;&#xfeff;一、配置BundleConfig.cs文件 1、首先要在App_Start 里面BundleConfig.cs 文件里面 添加要包含的css文件 2、BundleConfig就是一个微软新加的 一个打包的配置类 3、BundleConfig用来Add 各种Bundle 4、BundleConfig配置信息如下&#xff1a; public…

《读完忍不住流泪的文章:母亲,我怎么让妳等了那么久...》

母亲&#xff0c;我怎么让妳等了那么久...文/ 刘继荣 2009/06/03 10:08 母亲真的老了&#xff0c;变得孩子般缠人&#xff0c;每次打电话来&#xff0c;总是满怀热诚地问&#xff1a;「你什么时候回家&#xff1f;」 且不说相隔一千多里路&#xff0c;要转三次车。光是工作、…

JVM类加载的那些事

原文出处&#xff1a; 占小狼 前言 Java源代码被编译成class字节码&#xff0c;最终需要加载到虚拟机中才能运行。整个生命周期包括&#xff1a;加载、验证、准备、解析、初始化、使用和卸载7个阶段。 加载 1、通过一个类的全限定名获取描述此类的二进制字节流&#xff1b;2、将…

mvc razor模式 输出html

&#xfeff;&#xfeff;1、使用Html.Raw(str) Html.Raw("<div stylecolor:red>输出字符串</div>") 2、使用new HtmlString IHtmlString content new HtmlString("<div stylecolor:red>输出字符串</div>");content; 3、直接输出…

js如何获取上个月第一天和最后一天

var nowdays new Date();var year nowdays.getFullYear();var month nowdays.getMonth();if(month0){month12;yearyear-1;}if (month < 10) {month "0" month;}var firstDay year "-" month "-" "01";//上个月的第一天va…

卡尔曼滤波器代码python_基于Python的扩展的卡尔曼滤波器实现的恒定转速和加速度(CTRA)车辆模型...

Extended Kalman Filter Implementation for Constant Turn Rate and Acceleration(CTRA) Vehicle Model in Python.扩展卡尔曼滤波算法扩展的卡尔曼滤波器&#xff0c;其状态转移和观察模型不需要一定是状态的线性函数&#xff0c;而是状态的可微函数&#xff1b;这里&#xf…

jmeter结合autoit操作windows程序

需求&#xff1a; 模拟操作下图软件的控件&#xff0c;如拨号和挂机。 1. 下载安装好autoit后&#xff0c;打开finder tool&#xff0c;使用查找工具定位到要模拟操作的控件上&#xff0c;如图&#xff1a; 2.在finder tool中的control选项卡&#xff0c;可以看到该控件的信息。…