最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Pandas解析Excel導(dǎo)致的內(nèi)存溢出(MemoryError)的優(yōu)化指南

 更新時(shí)間:2026年07月26日 15:49:17   作者:元Y亨H  
Pandas讀取Excel文件時(shí),即使文件很小也可能因幽靈行導(dǎo)致內(nèi)存溢出并拋出MemoryError,本文深度復(fù)盤(pán)Pandas解析Excel內(nèi)存溢出的根本原因,并提供dropna、上下文管理器、垃圾回收等核心優(yōu)化方案,需要的朋友可以參考下

1. 問(wèn)題背景

在進(jìn)行大規(guī)模數(shù)據(jù)自動(dòng)化采集與處理時(shí),我們經(jīng)常使用 Pandas 庫(kù)來(lái)解析導(dǎo)出的 Excel 文件。然而,在某些場(chǎng)景下,代碼會(huì)突然拋出如下異常:

Unable to allocate ... MiB for an array with shape (7, 1048478) and data type object

報(bào)錯(cuò)特征:

  • 1,048,478 這個(gè)數(shù)字頻繁出現(xiàn)(它是 Excel 07版本后的最大行數(shù)上限)。
  • 內(nèi)存分配失敗,程序進(jìn)程直接崩潰或報(bào)錯(cuò)中斷。
  • 即便 Excel 文件物理大小并不大(可能只有幾百 KB),依然觸發(fā)了數(shù) GB 的內(nèi)存申請(qǐng)。

2. 深度復(fù)盤(pán):為什么會(huì)內(nèi)存溢出?

(1)Excel 的“幽靈行” (Phantom Rows) Excel 用戶在操作表格時(shí),往往會(huì)在空行處設(shè)置格式、按空格或進(jìn)行非完全刪除操作。Excel 會(huì)將這些行標(biāo)記為“已用區(qū)域(UsedRange)”。Pandas 的讀取引擎默認(rèn)會(huì)嘗試加載整個(gè)已用區(qū)域。

(2)Object 類型的沉重負(fù)擔(dān) 當(dāng) Pandas 發(fā)現(xiàn)某行有格式但無(wú)數(shù)據(jù)時(shí),會(huì)將其視為 NaN(空值)。在 Pandas 中,混合或空的對(duì)象列是以 Object 類型存儲(chǔ)的,每個(gè)單元格都會(huì)占用顯著的內(nèi)存空間。當(dāng)乘以 104 萬(wàn)行時(shí),即使只有幾列數(shù)據(jù),也會(huì)迅速占滿數(shù) GiB 的物理內(nèi)存。

(3)資源釋放不及時(shí) 在循環(huán)處理多個(gè) Excel 文件時(shí),如果不顯式釋放文件句柄和 DataFrame 對(duì)象,Python 的垃圾回收(GC)可能無(wú)法在內(nèi)存申請(qǐng)峰值到來(lái)前及時(shí)回收舊空間,導(dǎo)致內(nèi)存持續(xù)推高。

3. 核心優(yōu)化方案

為了應(yīng)對(duì)這類“幽靈行”引發(fā)的內(nèi)存危機(jī),建議采用以下標(biāo)準(zhǔn)模式:

A. 讀入后立即執(zhí)行“行壓縮”

在解析完 Sheet 后,第一時(shí)間刪除那些完全由空值組成的行,防止其進(jìn)入后續(xù)業(yè)務(wù)邏輯。

import pandas as pd

# 假設(shè) xl 是已經(jīng)打開(kāi)的 ExcelFile 對(duì)象
df = xl.parse(sheet_name)

# 核心代碼:立即剔除全空行,防止百萬(wàn)級(jí)空數(shù)據(jù)撐爆內(nèi)存
df.dropna(how='all', inplace=True)

if df.empty:
    # 如果剔除后沒(méi)有數(shù)據(jù),直接跳過(guò)處理
    return

B. 使用上下文管理器

避免直接使用 pd.read_excel。在需要處理多個(gè) Sheet 或頻繁讀取文件時(shí),使用 ExcelFile 結(jié)合 with 語(yǔ)句,可以確保資源被實(shí)時(shí)管理。

def process_excel(file_path):
    # 使用 with 確保文件句柄被正確關(guān)閉
    with pd.ExcelFile(file_path, engine='calamine') as xl:
        for sheet in xl.sheet_names:
            df = xl.parse(sheet)
            # 執(zhí)行數(shù)據(jù)清洗與邏輯...

C. 強(qiáng)制執(zhí)行垃圾回收

對(duì)于內(nèi)存極為敏感的場(chǎng)景,在大型 DataFrame 對(duì)象不再使用后,手動(dòng)進(jìn)行內(nèi)存釋放。

import gc

# 1. 刪除對(duì)象引用
del df

# 2. 強(qiáng)制觸發(fā)垃圾回收,歸還內(nèi)存空間給系統(tǒng)
gc.collect()

4. 最佳實(shí)踐總結(jié)筆記

場(chǎng)景避坑指南
文件讀取盡量使用 with pd.ExcelFile(...) 替代 read_excel
預(yù)防幽靈行永遠(yuǎn)在讀取后執(zhí)行 df.dropna(how='all')。
大批量處理循環(huán)內(nèi)部使用 del dfgc.collect() 維持內(nèi)存水位平穩(wěn)。
限定范圍如果已知有效數(shù)據(jù)不可能超過(guò)特定行數(shù),讀取時(shí)可加 nrows 參數(shù)兜底。

結(jié)語(yǔ): 內(nèi)存溢出不一定是數(shù)據(jù)量過(guò)大,更多時(shí)候是由于對(duì)“空數(shù)據(jù)”處理不當(dāng)造成的。保持對(duì)“幽靈行”的警惕,是提升數(shù)據(jù)自動(dòng)化腳本穩(wěn)定性的關(guān)鍵一步。

以上就是使用Pandas解析Excel導(dǎo)致的內(nèi)存溢出(MemoryError)的優(yōu)化指南的詳細(xì)內(nèi)容,更多關(guān)于Pandas Excel導(dǎo)致內(nèi)存溢出優(yōu)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 你真的了解Python的random模塊嗎?

    你真的了解Python的random模塊嗎?

    這篇文章主要介紹了Python的random模塊的相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python清空文件并替換內(nèi)容的實(shí)例

    Python清空文件并替換內(nèi)容的實(shí)例

    今天小編就為大家分享一篇Python清空文件并替換內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 使用selenium模擬動(dòng)態(tài)登錄百度頁(yè)面的實(shí)現(xiàn)

    使用selenium模擬動(dòng)態(tài)登錄百度頁(yè)面的實(shí)現(xiàn)

    本文主要介紹了使用selenium模擬動(dòng)態(tài)登錄百度頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • pytorch算子torch.arange在CPU?GPU?NPU中支持?jǐn)?shù)據(jù)類型格式

    pytorch算子torch.arange在CPU?GPU?NPU中支持?jǐn)?shù)據(jù)類型格式

    這篇文章主要為大家介紹了pytorch算子torch.arange在CPU?GPU?NPU支持?jǐn)?shù)據(jù)類型格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Pytorch獲取無(wú)梯度TorchTensor中的值

    Pytorch獲取無(wú)梯度TorchTensor中的值

    這篇文章主要介紹了Pytorch獲取無(wú)梯度TorchTensor中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python編程快速上手——正則表達(dá)式查找功能案例分析

    Python編程快速上手——正則表達(dá)式查找功能案例分析

    這篇文章主要介紹了Python正則表達(dá)式查找功能,結(jié)合具體實(shí)例形式分析了Python基于正則表達(dá)式遍歷查找指定格式文件的相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • 用實(shí)例解釋Python中的繼承和多態(tài)的概念

    用實(shí)例解釋Python中的繼承和多態(tài)的概念

    這篇文章主要介紹了用實(shí)例解釋Python中的繼承和多態(tài)的概念,繼承和多臺(tái)是學(xué)習(xí)每一門面對(duì)對(duì)象的編程語(yǔ)言時(shí)都必須掌握的重要知識(shí),需要的朋友可以參考下
    2015-04-04
  • pandas中DataFrame修改index、columns名的方法示例

    pandas中DataFrame修改index、columns名的方法示例

    這篇文章主要介紹了pandas中DataFrame修改index、columns名的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • pytorch?tensor合并與分割方式

    pytorch?tensor合并與分割方式

    這篇文章主要介紹了pytorch?tensor合并與分割方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法示例

    Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法,結(jié)合實(shí)例形式分析了Python針對(duì)字符串的翻轉(zhuǎn)、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評(píng)論

齐齐哈尔市| 青川县| 西乌珠穆沁旗| 全南县| 宁阳县| 宁夏| 阿巴嘎旗| 三门县| 南汇区| 柏乡县| 彰化市| 都江堰市| 雷波县| 鄄城县| 贵南县| 威远县| 建瓯市| 昌平区| 永顺县| 阳江市| 海林市| 贵南县| 孟津县| 肇东市| 宝兴县| 阳西县| 汾阳市| 翁源县| 章丘市| 罗甸县| 秦皇岛市| 平原县| 嘉定区| 衡阳市| 普兰店市| 合水县| 农安县| 宁海县| 夏邑县| 三亚市| 阿尔山市|