當前位置:
首頁 >
使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细)
發布時間:2024/3/26
82
豆豆
生活随笔
收集整理的這篇文章主要介紹了
使用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(详细)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10个常用的Linux命令解析
- 下一篇: 票据知识要点