Python3学习笔记31-xlrd模块

本文详细介绍xlrd模块的使用方法,包括如何读取Excel文件中的数据、获取特定单元格的值及类型,处理合并单元格和日期格式等内容。

xlrd模块是用来读取excel的第三方模块,需要下载安装后才能使用。新建一个excel,随便填充一些数据用来测试下。

# -*- coding: utf-8 -*-
import xlrd
#打开excel文件读取数据
exce = xlrd.open_workbook('C:/Users/ms/Desktop/test_xlrd.xlsx')

#获取excel中对应的sheet
print('所有sheet名称',exce.sheet_names()) #获取所有sheet名称
sheets = exce.sheets()  #获取所有sheets
#sheet = exce.sheets()[0]    #也可以通过下标去访问某个具体的sheet
sheet1 = exce.sheet_by_name('Sheet1')    #通过sheet名称获取
#sheet2 = exce.sheet_by_index(1) #通过下标获取某个sheet

#获取sheet中行数和列数
nrows = sheet1.nrows
ncols = sheet1.ncols
print('对应sheet中行数:%d行,列数:%d列'% (nrows,ncols))

#获取sheet中整行或整列的数据(数组)
row1 = sheet1.row_values(3)     #通过下标获取某一行的数据
col1 = sheet1.col_values(0)     #通过下标获取某一列的数据
print('某行的数据:',row1)
print('某列的数据:',col1)

#获取sheet中某个单元格的数据
cell_A3 = sheet1.cell(2,0).value    #第三行第一列
cell_B2 = sheet1.cell(1,1).value    #第二行第二列
cell_C3 = sheet1.cell(2,2).value    #第三行第三列
print('第一列第三行:',cell_A3)
print('第二行第二列:',cell_B2)
print('第三行第三列:',cell_C3)

#获取单元格数据类型
A3_ctype = sheet1.cell(2,0).ctype   #数字类型
B2_ctype = sheet1.cell(1,1).ctype   #str类型
C3_ctype = sheet1.cell(2,2).ctype   #data类型
print('数字类型:',A3_ctype)
print('str类型:',B2_ctype)
print('data类型:',C3_ctype)
#ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

在打印整行数据和整列数据的时候,合并的单元格,只会在合并的第一行或者第一列会有数据,之后打印出来都是空白。另外打印的日期时间也是错误的。

# -*- coding: utf-8 -*-
import xlrd
exce = xlrd.open_workbook('C:/Users/ms/Desktop/test_xlrd.xlsx')
sheet1 = exce.sheet_by_name('Sheet1')
print(sheet1.cell(4,0).value)
print(sheet1.cell(3,0).value)
print(sheet1.cell(3,2).value)
print(sheet1.cell(3,1).value)

先看合并单元格,这个没有任何技巧。只能获取 合并行单元格读取行的第一个索引,合并列单元格读取列的第一个索引。这样才能读到值,读错了就是空值。

但是合并单元格可能是读到空值,excel本身也可能就存在空值。要怎么获取单元格所谓的‘第一行或列的索引的’,这需要事先知道哪些单元格是合并的

print(sheet1.merged_cells)

使用merged_cells可以获得合并单元格。返回的参数(row,row_range,col,col_range),返回的是行数索引,行数索引范围,列数索引,列数索引范围。注意这里返回的应该都是索引。

根据返回的这四个值可以计算出合并单元格范围。计算时不需要把范围算进去,比如(3,5,0,1)行数索引就是3,4.对应excel行数就是第四行,第五行。列数所以就是0,也就是第一列

而在取所谓的第一行或第一列索引时候,直接从返回的四个参数中,取第一个和第三个就行了。可以对照上面的代码。对比下。

也可以封装成一个方法

# -*- coding: utf-8 -*-
import xlrd
exce = xlrd.open_workbook('C:/Users/ms/Desktop/test_xlrd.xlsx')
sheet1 = exce.sheet_by_name('Sheet1')
def row_col(sheet):
    merge = []
    for(row,row_range,col,col_range) in sheet.merged_cells:
        merge.append([row,col])
    for index in merge:
        print(sheet.cell(index[0],index[1]).value)
row_col(sheet1)

 

 

再来看日期格式

# -*- coding: utf-8 -*-
import xlrd
exce = xlrd.open_workbook('C:/Users/ms/Desktop/test_xlrd.xlsx')
sheet1 = exce.sheet_by_name('Sheet1')

#处理单元格内容为data格式的数据
print(xlrd.xldate_as_datetime(sheet1.cell(2,2).value,0))    #转换成日期格式
print(xlrd.xldate_as_tuple(sheet1.cell(2,2).value,0))   #返回元组

有两种处理方式,一种转换成日期,一种是转换成元组

#如果ctype等于3,就用时间格式处理
def xldate_datetime(sheet,row,col):
    if(sheet.cell(row,col).ctype==3):
        date_value = xlrd.xldate_as_datetime(sheet.cell(row,col).value,0)
        return date_value
print(xldate_datetime(sheet1,2,2))

可以简单封装成一个方法、

转载于:https://www.cnblogs.com/myal/p/9430333.html

内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值