Python数据处理(二):处理 Excel 数据

在本章和下一章里,咱们将研究两种文件类型实例:Excel 文件和 PDF,并给出几条通常性说明,在遇到其余文件类型时能够参考。python

处理 Excel 比上章讲的处理 CSV、JSON、XML 文件要难多了,下面以 UNICEF(联合国儿童基金会) 2014 年的报告为例,来说解如何处理 Excel 数据。bash

相关文章:工具

十分钟快速入门 Pythonpost

Python数据处理(一):处理 JSON、XML、CSV 三种格式数据spa

1、安装 Python 包

要解析 Excel 文件,须要用第三方的包 xlrd。咱们用 pip 来安装第三方包,在命令行输入如下安装命令:命令行

pip install xlrd
复制代码

若是提示 command not found ,则须要先安装 pip 。安装方法见 pip 官网:pip.pypa.io/en/stable/i…code

2、解析 Excel 文件

想从 Excel 工做表中提取数据,有时最简单的方式反而是寻找更好的方法来获取数据。直接解析有时并不能解决问题。因此在解析以前先看看能不能找到其余格式的数据,好比 CSV、JSON、XML等,若是真找不到再考虑 Excel 解析。cdn

处理 Excel 文件主要有三个库。对象

  • xlrd 读取 Excel 文件。blog

  • xlwt 向 Excel 文件写入,并设置格式。

  • xlutils 一组 Excel 高级操做工具(须要先安装 xlrd 和 xlwt)。

在用到这三个库的时候你须要分别安装。但本章只会用到 xlrd。

下面一步步的讲解如何解析 Excel 文件。

先导入 xlrd 库,而后打开工做簿并保存在 book 变量中。

import xlrd
book = xlrd.open_workbook('./resource/data.xlsx')
复制代码

与 CSV 不一样,Excel 工做簿能够有多个标签(tab)或工做表(sheet)。想要获取数据,咱们要找到包含目标数据的工做表。

若是有几个工做表,你能够猜一下索引号,但若是工做表不少的话就无法猜了。因此你应该知道 book.sheet_by_name(somename) 命令,其中 somename 是你要访问工做表的名字。

咱们来看一下工做表都有哪些名字:

import xlrd

book = xlrd.open_workbook('./resource/data.xlsx')

for sheet in book.sheets():
    print(sheet.name)
复制代码

book.sheets() 列出全部的 sheet,sheet.name 打印出 sheet 的名字。输出:

Data Notes
Table 9
复制代码

咱们要找的工做表是 Table 9。因此咱们把这个名字添加到脚本中:

import xlrd

book = xlrd.open_workbook('./resource/data.xlsx')

sheet = book.sheet_by_name('Table 9')
print(sheet)
复制代码

运行会输出相似这样的值:

<xlrd.sheet.Sheet object at 0x106af8898>
复制代码

要查看 sheet 都有什么方法,能够用 print(dir(sheet))。从打印的结果中找到一个 nrows 方法,sheet.nrows 返回这个 sheet 一共有多少行。咱们将用 nrows 来遍历每一行的内容。

import xlrd

book = xlrd.open_workbook('./resource/data.xlsx')

sheet = book.sheet_by_name('Table 9')

for i in range(sheet.nrows):
    print(sheet.row_values(i))
复制代码

运行程序获得以下图的输出:

取到表格的数据以后,接下来就该想怎么格式化这些数据,将有用的信息提取出来。提取信息的格式有不少种,这里咱们用其中一种:

{
  u'Afghanistan': {
		'child_labor': {
			'female': [9.6, ''],
			'male': [11.0, ''], 
			'total': [10.3, '']
		},
		'child_marriage': {
	     'married_by_15': [15.0, ''],
	     'married_by_18': [40.4, '']
		} 
	}, 
  u'Albania': {
   	'child_labor': {
     	'female': [9.4, u' '],
    	'male': [14.4, u' '],
      'total': [12.0, u' ']
  	},
    'child_marriage': {
    	'married_by_15': [0.2, ''],
    	'married_by_18': [9.6, '']
		} 
	},
	...
}
复制代码

如何肯定有用的数据从第几行开始

可以读取 Excel 数据以后,还要从中提取有用的信息,了解如何从纷繁复杂的数据提取关键数据很重要。

方法一:用软件打开Excel直观判断

首先最简单的方法是用软件打开 Excel 文件直观的看,以下图:

咱们上面定义的格式是以国家为键,因此首先应该找到国家。观察 Excel 表格,从第15 行开始显示国家数据。Child labour 和 Child marriage 的数据从第E列到第N列。

方法二:用程序屡次试验

若是不想用第一种方法,或者电脑上没有软件能够打开文件,能够尝试第二种方法:写代码屡次试验。

这个方法用到了计数器原理。先打印前10行,看有没有想要的数据,若是没有再打印11-20行,这样一个区间一个区间的排查,直到肯定准确的行数。

代码以下:

import xlrd

book = xlrd.open_workbook('./resource/data.xlsx')

sheet = book.sheet_by_name('Table 9')

count = 0
for i in range(sheet.nrows):
    if count < 10:
        row = sheet.row_values(i)
        print(i, row)
    count += 1
复制代码

先打印排查了前10行,查看控制台输出没有找到想要的国家数据,继续调整试验:

import xlrd

book = xlrd.open_workbook('./resource/data.xlsx')

sheet = book.sheet_by_name('Table 9')

count = 0
for i in range(10, sheet.nrows):
    if count < 10:
        row = sheet.row_values(i)
        print(i, row)
    count += 1
复制代码

咱们已经知道了前10行没有想要的数据,因此 range 直接改为 range(10, sheet.nrows) 从第10行开始打印,其余代码不变。再次运行程序,获得以下输出:

能够看到从第14行开始出现了国家名字,这就是咱们要找的数据。

3、组装数据

找到想要的数据在第几行第几列以后,就能够按以前定义的格式写代码提取组装数据啦。

import xlrd
import pprint

book = xlrd.open_workbook('./resource/data.xlsx')

sheet = book.sheet_by_name('Table 9')

# 定义存放数据的字典
data = {}
for i in range(14, sheet.nrows):
    row = sheet.row_values(i)
    # 取出国家名字
    country = row[1]
    # 按照给定的格式组装数据
    data[country] = {
        'child_labor': {
            'total': [row[4], row[5]],
            'male': [row[6], row[7]],
            'female': [row[8], row[9]],
        },
        'child_marriage': {
            'married_by_15': [row[10], row[11]],
            'married_by_18': [row[12], row[13]],
        }
    }
    # 最后一个国家是 Zimbabwe,判断到 Zimbabwe 以后就 break 跳出循环
    if country == 'Zimbabwe':
        break

# 打印数据
pprint.pprint(data)
复制代码

打印复杂对象时使用 pprint 格式更美观。

4、总结

  1. 处理 Excel 的三个库:xlrd,xlwt,xlutils。根据须要决定用哪些库。
  2. 解析出 Excel 以后,经过两种方法肯定想要数据的位置:用图形化界面打开直接观察和经过程序一步步筛选。若是不知道一个对象都有什么命令,能够打印 dir(obj) 来查看,其中 obj 是想要查看相关命令的对象。
  3. 提早想好最终想输出的格式,有格式以后组装数据会比较容易。
  4. 打印复杂对象时使用 pprint 格式更美观。

以上就是用 python 解析 Excel 数据的完整教程。下节会讲处理PDF文件,以及用Python解决问题,欢迎关注。

相关文章
相关标签/搜索