.xlsb 格式是Binary格式存储的excel文件,比普通的xlsx文件的体积要小很多,在数据量极大的场景比较多用。对于这类格式,Pandas 自带的Excel库xlrt xlwt不支持,而通过pyxlsb库可以读取.xlsb文件,转为Pandas 的DataFrame后方便处理:

import pyxlsb as px
import pandas as pdpath = r"D:\Split Excel\test file\test.xlsb"list_row=[]
list_accumulate= []with px.open_workbook(path) as wb:sheets = wb.sheetsfor sheet in sheets:row_generator = wb.get_sheet(sheet).rows()for row in row_generator:for cell in row:list_row.append(cell.v)list_accumulate.append(list_row)list_row=[]
df_excel = pd.DataFrame(list_accumulate)"""
解释:
1. wb.sheets 是一个列表,从左至右存放每一个工作表名
2. wb.get_sheet()方法用来获取一个表对象,可以用表名,也可以用数字如wb.get_sheet(1),值得注意的是这里的1表示第一张表. 其类型为<pyxlsb.worksheet.Worksheet>
3. wb.get_sheet().rows() 会生成一个迭代器,要先生成这个,然后利用它进行遍历
4. 迭代器生成每一个row,是一个内部定义的Cell对象组成列表,形式为[Cell(r=0, c=0, v='Name'), Cell(r=0, c=1, v='Age')]
5. Cell就是每一个单元格,是一个zip对象,每个Cell分别有三个属性,r c 为行标列标,v 为单元格的值,可以通过cell.v访问值进行操作,也可以通过r和c获得坐标, 按坐标操作
"""

有时候文件很大, 想要先了解一下,获得描述:

with px.open_workbook(path) as wb:sheets = wb.sheetssheet1 = wb.get_sheet(1)print(sheet1.dimension)
"""
这是一个6行,4列的表格,得到输出:dimension(r=0, c=0, h=6, w=4)
"""

之前的遍历方式是按行,每一个单元格都会有一个对应的Cell元素,工作表对象还有个cols属性,可以得到由列元素Col组成的列表,每个Col元素表示一个列:

sheet2.cols
"""
得到输出:
[col(c1=0, c2=0, width=9.7265625, style=0),col(c1=1, c2=1, width=3.90625, style=0),col(c1=2, c2=2, width=6.1796875, style=0),col(c1=3, c2=3, width=10.453125, style=0),col(c1=4, c2=4, width=16.54296875, style=0),col(c1=5, c2=5, width=12.6328125, style=0),col(c1=7, c2=7, width=13.453125, style=0)]col元素只表明列的一些特征,不包含值,值得注意的是有c1和c2两个列坐标,如:
col(c1=5, c2=5, width=12.6328125, style=0)
表示这个元素从第五列开始到第五列止,当多列的值都是完全一样的时候,多列就会合并为一个col元素,c1为起始列,c2为终止列。这个例子中没有第六列,因为第六列只有字段头,值都是空的
"""

如果要获得第一个工作表的首行作为标题,可以用__next__()获得迭代器生出的第一个结果:

with px.open_workbook(path) as wb:row_generator = wb.get_sheet(1).rows()title = row_generator.__next__()print(title)"""
得到输出:
[Cell(r=0, c=0, v='Name'),Cell(r=0, c=1, v='Age'),Cell(r=0, c=2, v='Height'),Cell(r=0, c=3, v='Hobbies')]
"""

最开头的例子中生成的df_excel,你会注意到列名是默认的0-n的数字标签,此时可以用获得的titie 作为列名:

path = r"D:\Split Excel\test file\test.xlsb"list_row = []
list_accumulate = []
with px.open_workbook(path) as wb:sheets = wb.sheetstitle = [cell.v for cell in wb.get_sheet(1).rows().__next__()]dict_rename = {k:v for k, v in enumerate(title)df_excel.rename(columns=dict_rename,inplace=True)
df_excel = df_excel.loc[1:].reset_index()
"""
重命名后,第0行就可以删除,删除后重建index
"""

使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细)相关推荐

  1. pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中

    一.说明: 通过pandas库解决生活中的实际问题,关键词:pandas:Series/DataFrame 实际场景: ①前几日家中的服装店部分库存需要补货,店长向厂家下了部分订单: ②几日后到了一批 ...

  2. r导入excel数据 linux,R语言中使用rio读取xlsx格式Excel文件|多个sheet表格|tidyverse rbind XLConnect readxl...

    前言 有时候数据格式是xlsx的,内部含有多个sheet表格,如果直接转换成csv的话非常费时.如果想批量处理文件(或者装个逼),这样就需要用到R了. 多种方案 使用rio包一次性读取到data li ...

  3. netcdf库读取nc格式文件中的字符串类型的数据

    netcdf库读取nc格式文件 一.背景 二.工具使用 三.测试代码 四.测试结果 一.背景 这两天解析数据需要解析nc格式的文件,时间是字符串类型的,最开始还以为这个数据有问题呢,使用panoply ...

  4. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  5. java中mypoiexception_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

  6. python的excell库_Python中使用第三方库xlrd来写入Excel文件示例

    继上一篇文章使用xlrd来读Excel之后,这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表示write x ...

  7. java 读excel 流_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    原文:https://www.cnblogs.com/cksvsaaa/p/7280261.html 注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经 ...

  8. python之读取、写入 excel 文件

    本文主要讨论如何使用 python 读取.写入 excel 文件.如有表述不当之处欢迎批评指正.欢迎任何形式的转载,但请务必注明出处. 目录 1. 引言 2. 读取 Excel 文件 3. 写入 Ex ...

  9. Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)

    Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录

最新文章

  1. zabbix企业应用之固定端口监控redis
  2. python写入数据到excel中_Python写入数据到Excel
  3. boost::hana::remove用法的测试程序
  4. spring cloud Alibaba Sentinel中文文档
  5. 在一基金慈善年会上面发言
  6. ssm数据库异常问题
  7. BZOJ 1019: [SHOI2008]汉诺塔( dp )
  8. UVA10227 POJ2419 ZOJ1900 Forests【并查集+set】
  9. ETL数据清洗的案例
  10. Windows 驱动开发 - 5
  11. Pascal基础(四)-常用函数和标准库
  12. 如何用两个栈实现一个队列?
  13. VS 2017安装教程
  14. Java随笔记 - 实现一个自定义的BitMap
  15. 3dmax su 简单_【建模技巧】如何用3DMAX制作简单的绣球模型
  16. TTL(生存时间)介绍
  17. linux系统漏洞升级方法,OpenSSL “Heartbleed”心脏流血漏洞升级方法
  18. 肖特基二极管的这几点技术参数,你未必全都知道
  19. open judge 1.5 18:鸡尾酒疗法
  20. 截至2015年工作中接触集成过的硬件设备整理记录

热门文章

  1. 遍历器 Iterator
  2. 计算机查看路由器地址代码,怎么查看路由器地址
  3. 在线寻求python学习交流伙伴!!!
  4. P4278 带插入区间K小值
  5. 使用MongoShake实现MongoDB数据实时导入Kafka
  6. laravel-debugbar调试工具的安装
  7. Win10 PowerShell命令大全
  8. 沈南鹏:创业凭第六感觉?
  9. 3DMAX纹理插件BerconMaps使用教程
  10. 普通二本,去过阿里外包,到现在年薪40W+的高级测试工程师,我的两年转行经历...