爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 30381|回复: 16

[经验总结] Python读取Excel数据

[复制链接]

新浪微博达人勋

发表于 2017-5-14 17:25:00 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 weinihou 于 2019-8-9 22:30 编辑

2017-05-19 补充

那个,下面之所以用到 xlrd ,完全是因为我对  pandas (Python Data Analysis Library)不熟

大家完全可以直接用pandas里面的函数来处理Excel数据,比 python-excel 强大……太多……

比如大家可以直接搜索 pandas Excel  或者其他类似内容,可能用到  pandas.read_excel()  pd.ExcelFile() 等等函数
可能有闲了新开一贴介绍,或者大家谁有兴趣分享分享吧,暂时不会整理相关内容(其实直接网上能找到的资料就一大堆了,似乎没有什么整理的必要性)

至于下面的内容……对于急着用的还是有一定参考价值的,吧?





                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图



                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图



这里仅仅介绍下“怎么读取Excel”,怎么写入可以自行搜索 xlwt 的相关内容(虽然我觉着大家一般不会碰到)
然后更多关于Python处理Excel的内容也可以自行参考相关材料,比如 http://www.python-excel.org

xlrd
http://xlrd.readthedocs.io/en/latest/index.html

GitHub上也给了官方的些示例,
https://github.com/python-excel/tutorial/tree/master/students/xlrd

xlrd可以读取Excel里的数据,无论 .xls .xlsx

# 先载入模块

import xlrd

# 文件名及其路径

filename = 'XX/XX.xls'

# 打开文件,获取文件对象(book)

bk = xlrd.open_workbook(filename, )
# 有其他的打开方式,比如配合mmap等,个人感觉直接这样是比较简单的

# 现在我们已经得到文件对象了,可以看一些文件的属性,比如我觉着可能比较常用的几个:
bk.dump()  # 文件的各种属性简述
bk.nsheets  # 工作簿的个数(sheet)
bk.sheet_names() # 工作簿的名字


# 接下来该打开工作簿了,通过上面获得的  个数 或者 名字 可以用两种方式

# 1)通过工作簿列表数来,配合bk.nsheets
sh = bk.sheet_by_index(0)

# 2)通过名字来,配合bk.sheet_names()
sh = bk.sheet_by_name('Sheet1') # 此处注意 大小写、中文等非标准字符解码的处理


# 顺手看下工作簿的属性吧,比如:
sh.dump() # 和上面相似,看各种属性梗概
sh.name # 就是名字诶,如果是靠参数打开的,可以输出确认下

sh.ncols # 列数
sh.nrows # 行数
# 上面俩是说数据的,我们假设数据是紧凑的,没有说神经的在隔了老远的地方突然蹦出来一个,那这俩参数可以用来估计下数据量,可以输出来确认下



# 重点来了,打开这些文件还不是为了读取数据啊~


# 1)通过单元格来读
sh.cell_value(rowx = 1,colx = 2) # 读取第2行、第3列,即Excel里C2单元格的内容,如果自己能搞清参数行row和列col的顺序,也可以直接用下面的缩写形式
sh.cell_value(1,2) # 等效于前面那个
# 注意这里读出来中文字符可能额外需要配置字符解码,utf-8什么的;另外单元格参数 rowx 和 colx 一定要在 sh.nrows sh.ncols 范围内(具体可能有每一行不一样的情况,但似乎大家不大可能遇到,通常Excel会设置成统一的,空单元格的值为空字符'')


# 2)通过行来读(读成list)
sh.row_values(0) # 读取第1行,完整形式:

sh.row_values(2, start_colx=4, end_colx=8)  # 读取3行,从第5列开始,一直读到第8列,即 cell_value(2,4)到cell_value(2,7),注意这里不包含cell_value(2,8);可以设置end_colx=None 读到行末(由sh.ncols定义)

sh.row_slice(2,4,8) # 和上面那个在取值上没啥区别,但会加上数据属性,比如‘text:’等等 ,除特殊需要,建议不要使用(那你为啥还要写!!!我不会告你是不想自己白试  (;¬_¬)   )


# 3)通过列来读(也是读成list)
sh.col_values(0)

sh.col_values(2, start_colx=4, end_colx=8)

sh.col_slice(2,4,8)

# 鉴于和上面一毛一样,就不再细说解释了

# End




                               
登录/注册后可看大图



差不多就是这样了,剩下的自己组合组合吧,尤其是这里默认都是直接读取为Python的list,如果需要数值计算,可能需要转 numpy.array 或者其他你需要的东西
如果只是list就满足了,可以考虑写个循环把工作簿中所有数据都先搞出来,比如:

  1. data_list = []
  2. for i in range(1,sh.nrows):
  3.     row_data = sh.row_values(i)
  4.     data_list.append(row_data)
复制代码


其他的很多可以参考上面链接给的资料、示例,比如文件比较大,可以考虑 bk.unload_sheet(name)

然后现在的文件打开方式其实不够好,因为你可以看到,获取完对象之后连个关闭文件的close操作都没有,能不能打开成功也全在交互方式试了,如果要搞批量,还得准备些其他东西,比如官方示例里这种:
https://github.com/python-excel/tutorial/blob/master/students/xlrd/open.py



希望对大家有帮助







评分

参与人数 1金钱 +22 贡献 +6 收起 理由
又是那隻貓 + 22 + 6

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-14 20:33:04 | 显示全部楼层
谢谢分享 ~~~~~~~~~~~~~~~~~~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-5-14 21:16:08 | 显示全部楼层
谢谢分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-5-14 22:09:42 | 显示全部楼层
pandas都能读取哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-14 22:43:29 | 显示全部楼层

啊啊啊啊,所以应该请人总结一下诶!!

我直接搜Python读取Excel然后出来了这些相关内容,所以学习然后总结了这个。
如果知道直接用pandas能搞掂就去总结pandas了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-15 07:19:44 | 显示全部楼层
感谢分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-5-19 09:02:57 | 显示全部楼层
多谢楼主分享{:5_213:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-19 17:43:31 | 显示全部楼层
好棒!! 多谢楼主!1{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-20 19:16:42 | 显示全部楼层
感谢分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-5-20 19:16:49 | 显示全部楼层
感谢分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表