欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解解決Python memory error的問題(四種解決方案)

 更新時間:2019年08月08日 11:05:45   作者:小白白白又白cdllp  
這篇文章主要介紹了詳解解決Python memory error的問題(四種解決方案),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

昨天在用用Pycharm讀取一個200+M的CSV的過程中,竟然出現(xiàn)了Memory Error!簡直讓我懷疑自己買了個假電腦,畢竟是8G內(nèi)存i7處理器,一度懷疑自己裝了假的內(nèi)存條。。。。下面說一下幾個解題步驟。。。。一般就是用下面這些方法了,按順序試試。

一、逐行讀取

如果你用pd.read_csv來讀文件,會一次性把數(shù)據(jù)都讀到內(nèi)存里來,導(dǎo)致內(nèi)存爆掉,那么一個想法就是一行一行地讀它,代碼如下:

data = []
with open(path, 'r',encoding='gbk',errors='ignore') as f:
  for line in f:
    data.append(line.split(','))
    
data = pd.DataFrame(data[0:100])

這就是先用with open把csv的每一行讀成一個字符串,然后因為csv都是靠逗號分隔符來分割每列的數(shù)據(jù)的,那么通過逗號分割就可以把這些列都分離開了,然后把每一行的list都放到一個list中,形成二維數(shù)組,再轉(zhuǎn)換成DataFrame。

這個方法有一些問題,首先讀進來之后索引和列名都需要重新調(diào)整,其次很多數(shù)字的類型都發(fā)生了變化,變成了字符串,最后是最后一列會把換行符包含進去,需要用replace替換掉。

不知道為什么,用了這個操作之后,還是出現(xiàn)了Memory error的問題?;谶@些缺點以及遺留問題,考慮第二種解決方案。

二、巧用pandas中read_csv的塊讀取功能

pandas設(shè)計時應(yīng)該是早就考慮到了這些可能存在的問題,所以在read功能中設(shè)計了塊讀取的功能,也就是不會一次性把所有的數(shù)據(jù)都放到內(nèi)存中來,而是分塊讀到內(nèi)存中,最后再將塊合并到一起,形成一個完整的DataFrame。

f = open(path)

data = pd.read_csv(path, sep=',',engine = 'python',iterator=True)
loop = True
chunkSize = 1000
chunks = []
index=0
while loop:
  try:
    print(index)
    chunk = data.get_chunk(chunkSize)
    chunks.append(chunk)
    index+=1

  except StopIteration:
    loop = False
    print("Iteration is stopped.")
print('開始合并')
data = pd.concat(chunks, ignore_index= True)

以上代碼規(guī)定用迭代器分塊讀取,并規(guī)定了每一塊的大小,即chunkSize,這是指定每個塊包含的行數(shù)。

這個方法能夠保持?jǐn)?shù)據(jù)的類型,也不需要自己費心思去調(diào)整列名和index,比較方便。但不幸的是,我的還是出現(xiàn)了這個問題,如果你的用了這種方法還是出現(xiàn)memory error,你可以繼續(xù)往下看。

三、擴充虛擬內(nèi)存

我在運行代碼的過程中發(fā)現(xiàn),出現(xiàn)memory error錯誤的時候,其實我的內(nèi)存只用到了40+%,所以其實不太可能會出現(xiàn)這個錯誤啊,所以我查了下,發(fā)現(xiàn)有說是內(nèi)存被限制了,考慮關(guān)掉一些可能限制內(nèi)存的軟件啦,擴大虛擬內(nèi)存啦,這些的。

擴大虛擬內(nèi)存的方法(我的系統(tǒng)是win8,不過應(yīng)該都大同小異):
1、打開 控制面板;
2、找到 系統(tǒng) 這一項;
3、找到 高級系統(tǒng)設(shè)置 這一項;
4、點擊 性能 模塊的 設(shè)置 按鈕;
5、選擇 高級面板,在 虛擬內(nèi)存 模塊點擊更改;
6、記得 不要 選中“自動管理所有驅(qū)動器的分頁文件大小”,然后選擇一個驅(qū)動器,也就是一個盤,選中自定義大小,手動輸入初始大小和最大值,當(dāng)然,最好不要太大,更改之后能在查看盤的使用情況,不要丟掉太多空間。
7、都設(shè)置好之后,記得點擊 “設(shè)置”, 然后再確定,否則無效,最后 重啟電腦 就可以了。

悲劇的是我在設(shè)置完這一步之后還是出現(xiàn)了內(nèi)存錯誤,到這一步就沒有問題了的朋友就可以不用看下面一種解法了,如果還是有問題,可以接下來看。

四、更新Pandas和Numpy庫為64位

如果你的Python用的是32位的,那么你的pandas和Numpy也只能是32位的,那么當(dāng)你的內(nèi)存使用超過2G時,就會自動終止內(nèi)存。發(fā)現(xiàn)這個錯誤也是因為我察覺到報內(nèi)存溢出的錯誤的時候,我的內(nèi)存明明顯示只用了40+%,然后錯誤提示是在pandas的core中,所以查了一下,發(fā)現(xiàn)原來還有這么個大坑。

解決方法就是:先檢查一下你的python是多少位的,在shell中輸入python,查看位數(shù),如果是32位,那么就重裝Python,裝一個64位的,但同時你的庫也需要重新裝了。不過我執(zhí)行完這一步之后,問題就完美解決了!

五、如果還有內(nèi)存溢出的錯

以上四種方法,按順序逐一使用,到哪一步錯誤消失了就可以停止啦。當(dāng)然了,如果你的內(nèi)存顯示使用達到了99%+,那么就是內(nèi)存真的不夠用,不是別的問題,如果不是數(shù)據(jù)量特別大,那就是寫代碼的時候的習(xí)慣問題,雖然Python有垃圾回收機制,但是有時候可能來不及回收,尤其是在循環(huán)迭代這些過程中,往往會循環(huán)完畢了才來得及收拾垃圾,所以記得及時把不要的變量del掉,或者用gc這個垃圾回收庫,這樣內(nèi)存自然就一直清清爽爽啦~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python+mysql實現(xiàn)個人論文管理系統(tǒng)

    python+mysql實現(xiàn)個人論文管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python+mysql實現(xiàn)個人論文管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python爬取網(wǎng)頁內(nèi)容轉(zhuǎn)換為PDF文件

    python爬取網(wǎng)頁內(nèi)容轉(zhuǎn)換為PDF文件

    這篇文章主要為大家詳細(xì)介紹了python爬取網(wǎng)頁內(nèi)容轉(zhuǎn)換為PDF文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python?分形算法代碼詳解

    Python?分形算法代碼詳解

    分形算法就是使用計算機程序模擬出大自然界的分形幾何圖案,是分形幾何數(shù)學(xué)與計算機科學(xué)相融合的藝術(shù),今天小編通過本文給大家介紹Python?分形算法實現(xiàn)代碼,感興趣的朋友一起看看吧
    2022-03-03
  • 對Python3 * 和 ** 運算符詳解

    對Python3 * 和 ** 運算符詳解

    今天小編就為大家分享一篇對Python3 * 和 ** 運算符詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python模塊itsdangerous簡單介紹

    python模塊itsdangerous簡單介紹

    這篇文章主要介紹了python模塊itsdangerous簡單介紹,本文通過案例分析給大家詳細(xì)講解,對python模塊itsdangerous相關(guān)知識感興趣的朋友一起看看吧
    2022-11-11
  • Python實現(xiàn)字符串模糊匹配的兩種實現(xiàn)方法

    Python實現(xiàn)字符串模糊匹配的兩種實現(xiàn)方法

    本文主要介紹了Python實現(xiàn)字符串模糊匹配的兩種實現(xiàn)方法,Python中通過re.search()方法實現(xiàn),對于首位起始的內(nèi)容匹配,也可通過re.match()方法實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 三個Python自動化辦公好用到爆的模塊分享

    三個Python自動化辦公好用到爆的模塊分享

    本文小編來給大家推薦幾個在自動化辦公領(lǐng)域當(dāng)中非常好用的Python模塊,可以幫助大家在工作當(dāng)中及大地提高效率,避免重復(fù)機械化地操作流程
    2022-07-07
  • Django錯誤:TypeError at / ''bool'' object is not callable解決

    Django錯誤:TypeError at / ''bool'' object is not callable解決

    這篇文章主要介紹了Django 錯誤:TypeError at / 'bool' object is not callable解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python 將代碼轉(zhuǎn)換為可執(zhí)行文件脫離python環(huán)境運行(步驟詳解)

    Python 將代碼轉(zhuǎn)換為可執(zhí)行文件脫離python環(huán)境運行(步驟詳解)

    這篇文章主要介紹了Python 將代碼轉(zhuǎn)換為可執(zhí)行文件脫離python環(huán)境運行(步驟詳解),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • python使用tkinter打造三維繪圖系統(tǒng)的示例代碼

    python使用tkinter打造三維繪圖系統(tǒng)的示例代碼

    Python?的?tkinter?模塊是一個常用的?GUI(圖形用戶界面)工具包,它能夠讓你創(chuàng)建窗口應(yīng)用程序,你可以使用它來構(gòu)建用戶友好的界面,包括按鈕、標(biāo)簽、文本框、列表框等各種控件,本文講給大家介紹如何使用tkinter打造三維繪圖系統(tǒng),需要的朋友可以參考下
    2023-08-08

最新評論