第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 python 中處理非常大的文件(13GB)而不崩潰?

如何在 python 中處理非常大的文件(13GB)而不崩潰?

收到一只叮咚 2023-12-12 21:43:11
我必須在服務(wù)器(不是我的計算機)上處理這個非常大的文件。它運行 python 64 并擁有 24 GB RAM。文件本身大小約為 13GB,包含 2700 萬行數(shù)據(jù)??紤]到服務(wù)器有相當大的規(guī)格,我確實嘗試將整個服務(wù)器加載到 pandas,但它崩潰了。我嘗試使用dask,但它仍然很慢。所以我將文件分成如下所示的塊。我的代碼與下面的類似。我以塊的形式加載文件,每個塊有 100,000 行數(shù)據(jù)。然后它將處理每個塊,并將其附加到現(xiàn)有文件中。我認為通過分塊處理事物,它不會將數(shù)據(jù)存儲在 RAM 中,但我認為它仍然如此。前幾百次迭代運行良好,但在處理 8GB 數(shù)據(jù)后的某個時候,它就崩潰了。chunksize= 100000c = 0for chunk in pd.read_csv(fname, chunksize=chunksize,sep='|',error_bad_lines=False):    chunk['col1'] = chunk['col1'].apply(process1)    chunk['col2'] = chunk['col2'].apply(process2)    if c == 0:        chunk.to_csv("result/result.csv", index=False)    else:        chunk.to_csv('result/result.csv', mode='a', header=False, index=False)    if c%10==0:        print(c)            c+=1通常,經(jīng)過 160 次迭代(生成 8 GB 的 result.csv 文件)后,程序會停止并顯示 .csv 文件MemoryError:。老實說,我無權(quán)訪問該服務(wù)器中的許多內(nèi)容,因此,如果您想建議更改我無權(quán)訪問的某些設(shè)置,那么我可能不能。但讓我們看看我能做什么。提前致謝。process1編輯:我將添加這里和這里發(fā)生的事情process2。def process1(name):    if type(name)==str:        new_name = name[:3]+'*' * len(name[:-3])    else:        return name        return new_namedef process2(number):    if number !=np.nan:        new_number = str(number)        new_number = '*'*len(new_number)        return new_number    else:        return number
查看完整描述

1 回答

?
慕哥6287543

TA貢獻1831條經(jīng)驗 獲得超10個贊

循環(huán)的一般語法for是


for target in expression:

    do all the things

Python 會將表達式計算為一個對象,只有當計算完成時,它才會將該對象分配給目標變量。這意味著任何已存在的對象在target其替換對象構(gòu)建完成之前都不會被刪除。


除非創(chuàng)建的對象很大,否則這沒什么大不了的。這里就是這種情況。創(chuàng)建新塊時,即將刪除的塊位于內(nèi)存中,這實際上使對內(nèi)存的影響加倍。解決方案是在返回更多目標之前手動刪除循環(huán)中的目標。


for chunk in pd.read_csv(fname, chunksize=chunksize,sep='|',error_bad_lines=False):


    chunk['col1'] = chunk['col1'].apply(process1)

    chunk['col2'] = chunk['col2'].apply(process2)


    if c == 0:

        chunk.to_csv("result/result.csv", index=False)

    else:

        chunk.to_csv('result/result.csv', mode='a', header=False, index=False)

    del chunk # destroy dataframe before next loop to conserve memory.    

    if c%10==0:

        print(c)

    c+=1


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號