使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细)
.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(详细)相关推荐
- pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中
一.说明: 通过pandas库解决生活中的实际问题,关键词:pandas:Series/DataFrame 实际场景: ①前几日家中的服装店部分库存需要补货,店长向厂家下了部分订单: ②几日后到了一批 ...
- r导入excel数据 linux,R语言中使用rio读取xlsx格式Excel文件|多个sheet表格|tidyverse rbind XLConnect readxl...
前言 有时候数据格式是xlsx的,内部含有多个sheet表格,如果直接转换成csv的话非常费时.如果想批量处理文件(或者装个逼),这样就需要用到R了. 多种方案 使用rio包一次性读取到data li ...
- netcdf库读取nc格式文件中的字符串类型的数据
netcdf库读取nc格式文件 一.背景 二.工具使用 三.测试代码 四.测试结果 一.背景 这两天解析数据需要解析nc格式的文件,时间是字符串类型的,最开始还以为这个数据有问题呢,使用panoply ...
- python读取excel内容和写入_Python读取和写入Excel文件
制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...
- java中mypoiexception_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...
注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...
- python的excell库_Python中使用第三方库xlrd来写入Excel文件示例
继上一篇文章使用xlrd来读Excel之后,这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表示write x ...
- java 读excel 流_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...
原文:https://www.cnblogs.com/cksvsaaa/p/7280261.html 注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经 ...
- python之读取、写入 excel 文件
本文主要讨论如何使用 python 读取.写入 excel 文件.如有表述不当之处欢迎批评指正.欢迎任何形式的转载,但请务必注明出处. 目录 1. 引言 2. 读取 Excel 文件 3. 写入 Ex ...
- Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)
Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录
最新文章
- zabbix企业应用之固定端口监控redis
- python写入数据到excel中_Python写入数据到Excel
- boost::hana::remove用法的测试程序
- spring cloud Alibaba Sentinel中文文档
- 在一基金慈善年会上面发言
- ssm数据库异常问题
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
- UVA10227 POJ2419 ZOJ1900 Forests【并查集+set】
- ETL数据清洗的案例
- Windows 驱动开发 - 5
- Pascal基础(四)-常用函数和标准库
- 如何用两个栈实现一个队列?
- VS 2017安装教程
- Java随笔记 - 实现一个自定义的BitMap
- 3dmax su 简单_【建模技巧】如何用3DMAX制作简单的绣球模型
- TTL(生存时间)介绍
- linux系统漏洞升级方法,OpenSSL “Heartbleed”心脏流血漏洞升级方法
- 肖特基二极管的这几点技术参数,你未必全都知道
- open judge 1.5 18:鸡尾酒疗法
- 截至2015年工作中接触集成过的硬件设备整理记录