2.Python读取excel数据

2.1 xlrd介绍

2.1.1 xlrd是什么?

xlrd是一个用于从Excel文件(无论是.xls还是.xlsx文件)读取数据和格式化信息的库。
可参考网址:https://xlrd.readthedocs.io/en/latest/index.html

2.1.2 xlrd安装

(1) 在安装了python 环境的前提下
(2) windows+r输入cmd进入终端
(3)执行pip install xlrd
如图所示:

在这里插入图片描述

2.2 xlrd使用

2.2.1 xlrd导入

当我们要调用库中的方法进行操作时。那第一步,就是通过import关键字来导入库。
代码如下:

import xlrd

2.2.2 Python操作工作簿

xlrd.open_workbook(filename) # 获取工作蒲
• filename–>文件名以及路径,如果路径或者文件名有中文给前面加一个r保留原生字符。
代码如下:

`book = xlrd.open_workbook(filename)

2.2.3 Python操作工作表

book.nsheets # 获取工作表个数,返回值为int
book.sheet_names() # 获取工作表名,返回值为list
book.sheets() # 以列表返回工作蒲中的所有工作表
• 由于book.sheets()获取的是以列表返回工作蒲中的所有工作表,那就可以通过索引来获取单个工作表
• 代码如下:

book.sheets()[0]    # 获取第一个工作表

book.sheet_by_index(sheetx) # 通过索引获取工作表
• sheetx–>工作表索引(索引从0开始)
• 代码如下:

book.sheet_by_index(0)  # 获取第一个工作表

book.sheet_by_name(sheet_name) # 通过工作表名获取工作表
• sheet_name–>工作表名
book.sheet_loaded(sheet_name_or_index) # 判断是否存在工作表,返回值为布尔
• sheet_name_or_index–>工作表名或者(or)索引
• 代码如下:

book.sheet_loaded(index or sheet_name)  # 作or运算

2.2.4 Python读取excel行数据

table.nrows # 返回工作表的总行数
table.row(rowx) # 返回由该行中所有的单元格对象组成的列表
table.row_slice(rowx, start_colx=0, end_colx=None) # 返回由该行中开始列到结束列的单元格对象组成的列表
• rowx–>指定行(默认从0开始)
• start_colx–>开始列
• end_colx–>结束列
table.row_types(rowx, start_colx=0, end_colx=None) # 返回该行切片后列表中每单元格的数据类型
• rowx–>指定行(默认从0开始)
• start_colx–>开始列
• end_colx–>结束列

注意
excel中数据类型对照:

ctype
0 empty(空值)
1 string(字符串)
2 number(数字)
3 date(日期)
4 boolean(布尔)
5 error(错误)

table.row_values(rowx, start_colx=0, end_colx=None) # 返回该行切片后列表中每单元格的值
table.row_len(rowx) # 返回该行有效单元格
示例1-1:
导入xlrd库

import xlrd as xr

读取数据文件weather_expectation.xlsx,并传入一个变量book中:

book = xr.open_workbook('weather_expectation.xlsx')

查询该变量book:

<xlrd.book.Book at 0x8522780>

打开原文件,文件里有两个工作簿,我们需要的工作簿在第二个工作簿中,因此索引值取1。
在这里插入图片描述
随后根据索引获取第一个工作表,将对象传入参数sheet_two中:

sheet_two = book.sheet_by_index(1)

查询变量sheet_two得:

<xlrd.sheet.Sheet at 0x87283c8>

说明已经获取到变量sheet了,因此我们可以继续后面的工作,我们通过nrows属性获取一下工作表的有效总行数:

sheet_two.nrows  # 获取工作表的有效总行数

输出结果为

7626

打开原文件,发现该工作表也有7626行
在这里插入图片描述
我们查询一下第七行的数据

sheet_two.row(6) # 获取第几行,注意:索引从0开始

注意,索引是从0开始,因此索引值为6,输出结果为:

[text:'62823',
 text:'20150710160000',
 text:'受“莲花”残余云系影响,昨天夜间到今天早晨,我市东部地区出现暴雨,最大降雨为坪西站76.1毫米,其余地区小到中雨;沿海和高地阵风8-9级,全市最大阵风出现在大梧桐,26.9米/秒;白天风雨减弱,多云间晴天,局部有阵雨;相对湿度85%-92%;气温24.6℃-33.1℃;截至下午16时,深圳市国家基本气象站记录到11.9毫米降水。',
 text:'多云,天气炎热,午后局部有阵雨;气温27-33℃;西到西北风2-3级;相对湿度60%-85% ',
 text:'预计未来一周我市以多云天气为主,天气炎热,部分时间有阵雨或雷阵雨',
 text:'20150710154100',
 text:'12.png',
 text:'27',
 text:'33',
 text:'0.0',
 text:'2',
 text:'西',
 text:'60.0',
 text:'85.0',
 text:'-',
 text:'-',
 text:'-',
 text:'27',
 text:'33',
 text:'02_2.png',
 text:'-',
 text:'1',
 text:'1',
 text:'1',
 text:'287894',
 text:'20150711035856',
 text:'-',
 text:'-',
 text:'-']

查看源数据为结果为:

在这里插入图片描述
跟上面的数据吻合。
因此我们可以读取第七行里从第六列开始的数据,通过切片的方式进行读取。

sheet_two.row(6)[6:]

获取索引为6行,索引为6列后的数据的类型

sheet_two.row_types(6,6)  # 获取索引为6行 索引为6列后的数据的类型

输出结果为:

array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

查表可知,数据类型均为字符串。
通过row_values()查询第六行每个单元格的值:

sheet_two.row_values(6)

输出结果为:

['62823',
 '20150710160000',
 '受“莲花”残余云系影响,昨天夜间到今天早晨,我市东部地区出现暴雨,最大降雨为坪西站76.1毫米,其余地区小到中雨;沿海和高地阵风8-9级,全市最大阵风出现在大梧桐,26.9米/秒;白天风雨减弱,多云间晴天,局部有阵雨;相对湿度85%-92%;气温24.6℃-33.1℃;截至下午16时,深圳市国家基本气象站记录到11.9毫米降水。',
 '多云,天气炎热,午后局部有阵雨;气温27-33℃;西到西北风2-3级;相对湿度60%-85% ',
 '预计未来一周我市以多云天气为主,天气炎热,部分时间有阵雨或雷阵雨',
 '20150710154100',
 '12.png',
 '27',
 '33',
 '0.0',
 '2',
 '西',
 '60.0',
 '85.0',
 '-',
 '-',
 '-',
 '27',
 '33',
 '02_2.png',
 '-',
 '1',
 '1',
 '1',
 '287894',
 '20150711035856',
 '-',
 '-',
 '-']

查询第七行的数据长度:

sheet_two.row_len(6)

查询结果为:

29

原数据也有29列,跟源数据吻合。

2.2.5 Python读取excel列数据

table.ncols # 返回工作表的总列数
table.col(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) # 返回由该列中开始行到结束行的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) # 返回该行切片后列表中每单元格的数据类型
table.col_values(colx, start_rowx=0, end_rowx=None) # 返回该行切片后列表中每单元格的值
示例1-2:
在示例1-1的基础上,我们查询该数据的有效列数:

sheet_two.ncols  # 获取该工作表有效列数

输出结果为:

29

跟原数据吻合。
后通过col()方法读取表格索引为2的列的0-9行

sheet_two.col(2,0,10) # 获取该表格索引为2列 的0-9行

col()方法的第一个参数为列数索引,第二个参数为起始行,第三个参数为结束行。我们也可以通过切片的方式去读取数据:

sheet_two.col(2)[0:10]

查询结果为:

[text:'WEATHERBACK',
 text:'昨天夜间到今天早晨,我市多云转阴天;早晨大部分地区最低气温26℃左右,吹和缓到清劲的偏北风,沿海和高地阵风6-7级;相对湿度55%-70%;全市大部分地区能见度在10-20公里之间。截至到早晨5时,深圳市国家基本气象站未记录到降水。我台已于9日8时30分将全市台风白色预警升级为蓝色。',
 text
  • 11
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值