python处理excel数据-Python数据处理(二):处理 Excel 数据

在本章和下一章里,我们将研究两种文件类型实例:Excel 文件和 PDF,并给出几条一般性说明,在遇到其他文件类型时可以参考。

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

相关文章:

一、安装 Python 包

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

pip install xlrd

如果提示 command not found ,则需要先安装 pip 。安装方法见 pip 官网:https://pip.pypa.io/en/stable/installing/ 。

二、解析 Excel 文件

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

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

xlrd

读取 Excel 文件。

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)

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

要查看 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))

运行程序得到如下图的输出:

7546f4bd2b8a

image

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

{

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 文件直观的看,如下图:

7546f4bd2b8a

image

我们上面定义的格式是以国家为键,所以首先应该找到国家。观察 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行开始打印,其他代码不变。再次运行程序,得到如下输出:

7546f4bd2b8a

image

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

三、组装数据

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

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 格式更美观。

四、总结

处理 Excel 的三个库:xlrd,xlwt,xlutils。根据需要决定用哪些库。

解析出 Excel 之后,通过两种方法确定想要数据的位置:用图形化界面打开直接观察和通过程序一步步筛选。如果不知道一个对象都有什么命令,可以打印 dir(obj) 来查看,其中 obj 是想要查看相关命令的对象。

提前想好最终想输出的格式,有格式之后组装数据会比较容易。

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用一些库来处理Excel数据,例如xlrd、xlwt和pandas等。其,xlrd用于读取Excel文件数据,xlwt用于创建新的Excel并进行写入操作,而pandas是一个功能强大的数据分析库,可以处理各种数据,包括Excel数据。 例如,你可以使用xlrd来读取Excel文件数据,并将其保存到字典: ```python import xlrd def load_data(file_list): dictory = {} for file in file_list: book = xlrd.open_workbook(file) sheet = book.sheet_by_index(0) rows = sheet.nrows cols = sheet.ncols head = sheet.row_values(0) for row in range(rows-1): if not sheet.cell_value(row+1, 0) in dictory.keys(): dictory[sheet.cell_value(row+1, 0)] = {} for col in range(cols-1): dictory[sheet.cell_value(row+1, 0)][head[col+1]] = float(sheet.cell_value(row+1, col+1)) return dictory ``` 然后,你可以使用xlwt来保存合并后的数据并生成新的Excel文件: ```python import xlwt def save(dictory): name = input("请输入文件名(无需加后缀):") book = xlwt.Workbook() sheet = book.add_sheet('Sheet1', cell_overwrite_ok=True) keys = list(dictory[list(dictory.keys())[0]].keys()) head = ["城市"] head.extend(keys) for h in range(len(head)): sheet.write(0, h, head[h]) cities = list(dictory.keys()) for city in range(len(cities)): sheet.write(city+1, 0, cities[city]) for key in range(len(keys)): sheet.write(city+1, key+1, dictory[cities[city]][keys[key]]) book.save(name+'.xls') print("保存成功") ``` 这样,你就可以方便地处理和操作Excel数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值