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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

收到一只叮咚 2023-12-12 21:43:11
我必須在服務(wù)器(不是我的計(jì)算機(jī))上處理這個(gè)非常大的文件。它運(yùn)行 python 64 并擁有 24 GB RAM。文件本身大小約為 13GB,包含 2700 萬(wàn)行數(shù)據(jù)。考慮到服務(wù)器有相當(dāng)大的規(guī)格,我確實(shí)嘗試將整個(gè)服務(wù)器加載到 pandas,但它崩潰了。我嘗試使用dask,但它仍然很慢。所以我將文件分成如下所示的塊。我的代碼與下面的類似。我以塊的形式加載文件,每個(gè)塊有 100,000 行數(shù)據(jù)。然后它將處理每個(gè)塊,并將其附加到現(xiàn)有文件中。我認(rèn)為通過(guò)分塊處理事物,它不會(huì)將數(shù)據(jù)存儲(chǔ)在 RAM 中,但我認(rèn)為它仍然如此。前幾百次迭代運(yùn)行良好,但在處理 8GB 數(shù)據(jù)后的某個(gè)時(shí)候,它就崩潰了。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)過(guò) 160 次迭代(生成 8 GB 的 result.csv 文件)后,程序會(huì)停止并顯示 .csv 文件MemoryError:。老實(shí)說(shuō),我無(wú)權(quán)訪問(wèn)該服務(wù)器中的許多內(nèi)容,因此,如果您想建議更改我無(wú)權(quán)訪問(wè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貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

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


for target in expression:

    do all the things

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


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


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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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