使用 Pandas 讀取超過 65536 行的 Excel 文件

場景

今天需要合并天貓訂單數(shù)據(jù)吊奢,由于前期6.18活動(dòng)有很多數(shù)據(jù)需要處理央勒,將幾個(gè)月份合并一起,結(jié)果報(bào)錯(cuò)葱跋。


image.png

問題分析

Excel 文件的格式曾經(jīng)發(fā)生過一次變化持寄,在 Excel 2007 以前,使用擴(kuò)展名為 .xls 格式的文件娱俺,這種文件格式是一種特定的二進(jìn)制格式稍味,最多支持 65,536 行,256 列表格荠卷。從 Excel 2007 版開始模庐,默認(rèn)采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行數(shù)達(dá)到了 1,048,576油宜,列數(shù)達(dá)到了 16,384掂碱。需要注意的是,將 .xlsx 格式的文件轉(zhuǎn)換為 .xls 格式的文件時(shí)验庙,65536 行和 256 列之后的數(shù)據(jù)都會被丟棄顶吮。

Pandas 讀取 Excel 文件的引擎是 xlrd , xlrd 雖然同時(shí)支持 .xlsx 和 .xls 兩種文件格式粪薛,但是在源碼文件 xlrd/sheet.py 中限制了讀取的 Excel 文件行數(shù)必須小于 65536悴了,列數(shù)必須小于 256。

if self.biff_version >= 80:
    self.utter_max_rows = 65536
else:
    self.utter_max_rows = 16384
self.utter_max_cols = 256

這就導(dǎo)致,即使是 .xlsx 格式的文件湃交, xlrd 依然不支持讀取 65536 行以上的 Excel 文件(源碼中還有一個(gè)行數(shù)限制是 16384熟空,這是因?yàn)?Excel 95 時(shí)代, xls 文件所支持的最大行數(shù)是 16384)搞莺。

解決辦法

openpyxl 是一個(gè)專門用來操作 .xlsx 格式文件的 Python 庫息罗,和 xlrd 相比它對于最大行列數(shù)的支持和 .xlsx 文件所定義的最大行列數(shù)一致。
首先安裝 openpyxl :

pip install openpyxl

Pandas 的 read_excel 方法中才沧,有 engine 字段迈喉,可以指定所使用的處理 Excel 文件的引擎,填入 openpyxl 温圆,再讀取文件就可以了挨摸。

import os
import pandas as pd

# 將文件讀取出來放一個(gè)列表里面

pwd = '1'  # 獲取文件目錄

# 新建列表,存放文件名
file_list = []

# 新建列表存放每個(gè)文件數(shù)據(jù)(依次讀取多個(gè)相同結(jié)構(gòu)的Excel文件并創(chuàng)建DataFrame)
dfs = []

for root,dirs,files in os.walk(pwd):  # 第一個(gè)為起始路徑岁歉,第二個(gè)為起始路徑下的文件夾得运,第三個(gè)是起始路徑下的文件。
    for file in files:
        file_path = os.path.join(root, file)
        file_list.append(file_path)  # 使用os.path.join(dirpath, name)得到全路徑
        df = pd.read_excel(file_path)  # 導(dǎo)入xlsx文件锅移,將excel轉(zhuǎn)換成DataFrame
        dfs.append(df)
        


# 將多個(gè)DataFrame合并為一個(gè)
df = pd.concat(dfs)

# 數(shù)據(jù)輸出熔掺,寫入excel文件,不包含索引數(shù)據(jù)
# 數(shù)據(jù)寫入 Excel非剃,需要首先安裝一個(gè) engine置逻,由 engine 負(fù)責(zé)將數(shù)據(jù)寫入 Excel,pandas 使用 openpyx 或 xlsxwriter 作為寫入引擎备绽。
df.to_excel('test\\1.xlsx', index=False,engine='openpyxl') # 導(dǎo)出 Excel诽偷,一般不需要索引,將 index 參數(shù)設(shè)為 False

www.qmpython.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疯坤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子深浮,更是在濱河造成了極大的恐慌压怠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞苇,死亡現(xiàn)場離奇詭異菌瘫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)布卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門雨让,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忿等,你說我怎么就攤上這事栖忠。” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵庵寞,是天一觀的道長狸相。 經(jīng)常有香客問我,道長捐川,這世上最難降的妖魔是什么脓鹃? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮古沥,結(jié)果婚禮上瘸右,老公的妹妹穿的比我還像新娘。我一直安慰自己岩齿,他們只是感情好太颤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纯衍,像睡著了一般栋齿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上襟诸,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天瓦堵,我揣著相機(jī)與錄音,去河邊找鬼歌亲。 笑死菇用,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陷揪。 我是一名探鬼主播惋鸥,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悍缠!你這毒婦竟也來了卦绣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤飞蚓,失蹤者是張志新(化名)和其女友劉穎滤港,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴拧,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溅漾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了著榴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片添履。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脑又,靈堂內(nèi)的尸體忽然破棺而出暮胧,到底是詐尸還是另有隱情锐借,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布叔壤,位于F島的核電站瞎饲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炼绘。R本人自食惡果不足惜嗅战,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俺亮。 院中可真熱鬧驮捍,春花似錦、人聲如沸脚曾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本讥。三九已至珊泳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拷沸,已是汗流浹背色查。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撞芍,地道東北人秧了。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像序无,于是被迫代替她去往敵國和親验毡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容