Python处理Excel的包
在PYthon中处理Excel文件(扩展名为.xls
和.xlsx
的文件)的扩展包为xlrd
和xlwt
,这两个包对Excel中的日期型数据支持非常好。而在Anaconda Python中,已经含有了这两个包,不用额外安装。如果是最原始版本的Python,则需要下载这两个包。
书中关于这两个包的介绍并不多,因此一些参数只是告诉你了要么用,至于这个参数具体是做什么的,这个包的某些函数还有没有其它的参数,作者并没有多讲,因此可以检索一下xlrd
和xlwt
这两个包的文档。
练习数据下载
《Python数据分析基础》这本书中的源数据和源代码已经上传至Github上,自己可以下载下来。
下载后的Excel练习数据一共是3个,名称分别为:sales_2013
,sales_2014
和sales_2015
。其中以sales_2013
为例说明一下,这个文件中一共有3个Excel表格,名称分别为january_2013
,february_2013
和march_2013
。
Excel与csv文件的不同之处在于,一个Excel文件(后文称为一个Exce工作薄)含有多个工作表(sheet)。通过工作簿的内省可以获取工作表的信息:
Python的内省(Introspection)是一种自我检查行为。在编程过程中,自省能够获取对象的类型与属性。
注:在这篇笔记中,工作簿是指一个Excel文件,而一个工作簿中则中含有多个工作表。
获取工作表的信息
下面的代码命名为1excel_introspect_workbook.py
,它的功能在于获取一个Excel文件中工作表的数量、名称和每个工作表中行与列的数量,如下所示:
|
|
运行如下所示:
|
|
解释代码:
- 使用
open_workbook
函数打开了一个Excel主文件,并赋给了一个名为workbook
的对象,这个对象中包含了工作簿中的所有可用的信息,可以查看一下,如下所示:
|
|
name
属性则是获取每个sheet的名称,nrow
与ncol
则是获取每个sheet的行与列的数目
处理单个sheet
读写Excel文件
下面的代码功能在于读取一个excel文件,名称为2excel_parsing_and_write.py
,代码如下所示:
|
|
运行结果如下所示:
|
|
打开2output.xls
后如下所示:
其中第5列,也就是Purchase Date
这一列是数字,而不是日期。Excel会将日期和时间保存为浮点数,这个浮点数代表从1900年1月0日起经过的日期数,加上一个24小时的小数部分。例如数值1表示1900年1月1日,因为从1900年1月0日是过去了1天,因此这一列中的数值代表日期,只是这是没有经过格式化的日期数据。
xlrd
能够格式化这种日期。
格式化日期
常规方法
格式化日期的Python代码保存为3excel_parsing_and_write_keep_dates.py
,代码内容如下所示:
|
|
运行结果如下所示:
|
|
使用pandas
读取Excel文件
使用pandas
也可以读取Excel文件,将下面的代码保存为pandas_read_and_write_excel.py
,如下所示:
|
|
运行结果如下所示:
|
|
选取特定的行
现在挑出那些Sale Amount
超过1400的行。
常规Python选择某一行
保存下面代码,命名为4excel_value_meets_condition.py
,代码如下所示:
|
|
运行结果如下所示:
|
|
pandas
包选取某一行
在下面的案例中,使用pandas
挑出那些Sale Amount
列大于1400的行。如果需要多个条件,则需要添加&
与|
符号,代码文件保存为pandas_value_meets_condition.py
。
|
|
运行代码如下所示:
|
|
打开pandas_output.xlsx
,如下所示:
挑选满足多个条件的行
例如在前面的数据中,我们要挑选01/24/2013
与01/31/2013
这两个购买日期的行,代码保存为5excel_value_in_set.py
,如下所示:
|
|
运行以下代码即可:
|
|
挑选满足某一特定模式的行
任务:选择那些顾客的名字里,首字母是J
的行,使用pandas来实现,如下所示:
|
|
按如下方式运行代码:
|
|
选取特定列
使用Python选取特定的列的时,可以采用列索引值,也可以采用列标题来实现。
按索引值来提取列。**
现在假设我们想保留Customer Name和Purchase Date这两列,使用Pandas来实现,保存代码为pandas_column_by_index.py
,如下所示:
|
|