日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/3/26 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

.xlsb 格式是Binary格式存儲(chǔ)的excel文件,比普通的xlsx文件的體積要小很多,在數(shù)據(jù)量極大的場(chǎng)景比較多用。對(duì)于這類(lèi)格式,Pandas 自帶的Excel庫(kù)xlrt xlwt不支持,而通過(guò)pyxlsb庫(kù)可以讀取.xlsb文件,轉(zhuǎn)為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 是一個(gè)列表,從左至右存放每一個(gè)工作表名 2. wb.get_sheet()方法用來(lái)獲取一個(gè)表對(duì)象,可以用表名,也可以用數(shù)字如wb.get_sheet(1),值得注意的是這里的1表示第一張表. 其類(lèi)型為<pyxlsb.worksheet.Worksheet> 3. wb.get_sheet().rows() 會(huì)生成一個(gè)迭代器,要先生成這個(gè),然后利用它進(jìn)行遍歷 4. 迭代器生成每一個(gè)row,是一個(gè)內(nèi)部定義的Cell對(duì)象組成列表,形式為[Cell(r=0, c=0, v='Name'), Cell(r=0, c=1, v='Age')] 5. Cell就是每一個(gè)單元格,是一個(gè)zip對(duì)象,每個(gè)Cell分別有三個(gè)屬性,r c 為行標(biāo)列標(biāo),v 為單元格的值,可以通過(guò)cell.v訪問(wèn)值進(jìn)行操作,也可以通過(guò)r和c獲得坐標(biāo), 按坐標(biāo)操作 """

有時(shí)候文件很大, 想要先了解一下,獲得描述:

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

之前的遍歷方式是按行,每一個(gè)單元格都會(huì)有一個(gè)對(duì)應(yīng)的Cell元素,工作表對(duì)象還有個(gè)cols屬性,可以得到由列元素Col組成的列表,每個(gè)Col元素表示一個(gè)列:

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兩個(gè)列坐標(biāo),如: col(c1=5, c2=5, width=12.6328125, style=0) 表示這個(gè)元素從第五列開(kāi)始到第五列止,當(dāng)多列的值都是完全一樣的時(shí)候,多列就會(huì)合并為一個(gè)col元素,c1為起始列,c2為終止列。這個(gè)例子中沒(méi)有第六列,因?yàn)榈诹兄挥凶侄晤^,值都是空的 """

如果要獲得第一個(gè)工作表的首行作為標(biāo)題,可以用__next__()獲得迭代器生出的第一個(gè)結(jié)果:

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')] """

最開(kāi)頭的例子中生成的df_excel,你會(huì)注意到列名是默認(rèn)的0-n的數(shù)字標(biāo)簽,此時(shí)可以用獲得的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 """

總結(jié)

以上是生活随笔為你收集整理的使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。