首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

读Python数据分析基础之Excel读写与处理

对于业务型数据分析来说,Excel可以说是打交道最多的软件了,可以说没有之一。之前有比较系统地读过《Python数据分析基础》(Foundations for Analysis with Python),写了一些笔记,这里只选取关于Excel的部分。

这篇笔记不是讲各类Excel函数和快捷键,而是讲Python对Excel的 .xls 和 .xlsx 格式数据的读写和处理。《Python数据分析基础》第82页说:

Excel 是商业活动中不可或缺的工具,所以知道如何使用 Python 处理 Excel 数据可以使 你将 Python 加入到数据处理工作流中,进而从其他人那里接收数据,并以他们习惯接受的 方式分享数据处理结果。

目录

Excel文件简介

Excel文件的读取

Excel文件的写入

pandas库读写Excel

筛选与统计量计算

Excel文件简介

Excel其实相信大家都不陌生,一个 .xls(Excel 2013后默认格式为 .xlsx )文件是一个工作簿(workbook),包含多个表(worksheet),每个表内数据按照行列进行组织,书中第三章的用词中,“文件”和“工作簿”表示同一个对象。拿本篇笔记用到的示例文件 sales_2015.xlsx 为例:

workbookAndWorkSheets

本篇笔记需要用到两个库: xlrd 和 xlwt,这两个库不是内置模块,但安装了Anaconda集成环境的话,这两个库被包含了,可以通过 import xlrd 和 import xlwt 进行测试,如果提示未安装,可以通过命令行下用pip安装,本处不展开。xlrd用来读取Excel文件,xlwt用于构建Workbook对象进行Excel文件的创建和写入数据。这两个库不能对Excel文件进行直接更改,因此思路是复制一份数据到内存进行分析计算,再写入新Excel文件中。需要直接性地修改可以考虑VBA吧,VBA(Visual Basic for Applications)是目前 Office 套件支持的基于 Visual Basic 的宏语言,目前一般在Excel或PPT内进行编程实现高级效果(如Excel数据的批量修改)一般都用VBA,当然以后Office要内置Python了,现在学好Python以后就能很容易理解和定制化Excel的宏了。

Excel文件的读取

通过xlrd库的open_workbook()对Excel数据进行读入。

输出:

Excel文件的写入

写入要用到 xlwt 库,如下面的代码,创建一个Workbook对象后,通过worksheet.write()写入数据。因为使用with进行处理,所以不需要写close()显式关闭打开的文件。

输出:

生成的文件效果如下:

save_sales_by_xlwt

上面写成的函数parsingExcToWrite()就是是一个可以使用在读取、处理、写入的框架,如前所说,这两个库不能直接对Excel进行修改,那么读取相应的数据处理后再写入新表就是很好的解决方案。 下面的处理代码如果需要保存处理后的数据就可以基于这段代码进行扩展。

pandas库读写Excel

下面看看用pandas进行Excel读取的操作, 读只需要一句话(引入库的不算在内),pd.read_excel(in_fname),和前一篇笔记读取csv的格式一样,都是生成dataframe数据格式。写入Excel通过pd.ExcelWriter()构建一个Excel写入对象,再对这个对象操作,最后调用 .save()进行写入到硬盘。

筛选与统计量计算

因为pandas可以简化一些操作,并且多练pandas是很有意义很重要的,所以下面筛选和统计量的计算都是基于pandas的处理。

有些时候,我们并不需要 Excel 文件中的所有行,特别是数据量很大但是我们只关心满足一定条件的数据。例如,可能只需要包含一个特定的词数值的那些行,或者只需要那些与一个具体日期相关联的行数据。这时候我们就需要进行筛选,去掉不需要的行,只保留需要的行。

下面的代码演示了筛选 Sale Amount 大于 $567.00 的行。我们可以通过改变代码data_frame_value_meets_condition = data_frame[data_frame['Sale Amount'].astype(float) > 567.0] 来筛选行中的值满足某个条件的数据。

输出:

使用 pandas 基于列标题选取特定列,一种方式是在数据框名称后面的方括号中将列名以字符串方式列出。另外一种方式是使用 loc 函数。如果使用 loc 函数,那么需要在列标题列表前面加上一个冒号和一个逗号,表示你想为这些特定的列保留所有行。例如下面的代码:

输出:

大家可以根据代码的效果区分上上部分代码的data_frame.iloc[:, [1, 4]] 和上面的data_frame.loc[:, ['Customer ID', 'Purchase Date']]

.loc for label based indexing

.iloc for positional indexing

数据装入pandas的dataframe之后,除了进行筛选,计算一些统计量也是数据分析很重要的工作,描述性统计给我们提供了很多描述数据的指标,下面的代码为工作表的销售数据计算总数和均值。

输出:

《Python数据分析基础》第三章讲了Excel文件的读写和处理,里面提供了xlrd、xlwt进行读写处理以及对应的pandas库进行读写和处理,本篇笔记基本覆盖了第三章的重点内容,缩减了一些例子,在处理的部分都是用pandas库进行,书中还提供了xlrd、xlwt进行处理的代码,代码比较长,需要理解这部分内容请阅读原书。下一章进入数据库的内容,数据库也是数据分析师经常要操作的工具。之后在可视化部分中还会经常用到pandas,读取数据后进行可视化是很美好的事。

本篇笔记的GitHub同步项目于readingForDS。pandas是很有用的工具,需要多练习来掌握。关于本系列笔记有任何建议欢迎留言讨论。(ps:这篇笔记在简书上发得早一些,但都是原创)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117G01NMU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券