日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

這招可以讓Pandas 數(shù)據(jù)幀處理速度提高400倍!

 zjshzq 2021-07-17

數(shù)據(jù)處理是數(shù)據(jù)科學(xué)模型開發(fā)流程的重要組成部分之一。數(shù)據(jù)科學(xué)家需要花費(fèi)80%的時(shí)間準(zhǔn)備數(shù)據(jù)集以使其適合建模。有時(shí),對(duì)大型數(shù)據(jù)集執(zhí)行數(shù)據(jù)整理和探索變得繁瑣的工作,只有等待很長(zhǎng)時(shí)間才能完成計(jì)算,或者轉(zhuǎn)移到某些并行處理。

Pandas 是擁有大量API的著名 Python 庫(kù)之一,但是在可伸縮性方面卻失敗了。對(duì)于大型數(shù)據(jù)集,迭代整個(gè)循環(huán)有時(shí)會(huì)花費(fèi)很多時(shí)間,有時(shí)甚至是數(shù)小時(shí),甚至對(duì)于小型數(shù)據(jù)集,使用標(biāo)準(zhǔn)循環(huán)對(duì)數(shù)據(jù)框架進(jìn)行迭代也非常耗時(shí)。

在本文中,我們將討論在大型數(shù)據(jù)集上加快迭代過程的技術(shù)或技巧。

處理速度

1、Pandas 內(nèi)置函數(shù):iterrows()

iterrows() 是內(nèi)置的 Pandas 庫(kù)函數(shù),它返回一系列的每個(gè)實(shí)例或行。它將數(shù)據(jù)幀作為一對(duì)索引和列特征作為Series進(jìn)行迭代。

我使用了一個(gè)具有1000萬(wàn)條記錄和5列的數(shù)據(jù)集。我們?cè)跀?shù)據(jù)集中使用字符串類型的特征'name',必須將其刪除以刪除空格。

temp=[]
for i,row in df.iterrows():
    name_new = row['name'].strip()
    temp.append(name_new)

該代碼段執(zhí)行了將近「1967秒」?,F(xiàn)在,讓我們找出其他技術(shù)來遍歷數(shù)據(jù)幀并比較其時(shí)間復(fù)雜度。

按索引迭代

數(shù)據(jù)框是具有行和列的Pandas對(duì)象。數(shù)據(jù)幀的行和列都已建立索引,并且可以遍歷索引以遍歷行。

temp=[]
for idx in range(0,df.shape[0],1):
    name_new = df['name'].iloc[idx].strip()
    temp.append(name_new)

遍歷數(shù)據(jù)幀并執(zhí)行剝離操作花了將近「223秒」(比iterrows函數(shù)快9倍)。

使用 to_dict()

只需將Pandas數(shù)據(jù)框轉(zhuǎn)換為字典,即可遍歷數(shù)據(jù)框并以閃電般的速度執(zhí)行操作。你可以在Pandas中使用.to_dict()函數(shù)將數(shù)據(jù)框轉(zhuǎn)換為字典?,F(xiàn)在,與iterrows()函數(shù)相比,在字典上進(jìn)行迭代相對(duì)非??臁?/p>

df_dict = df.to_dict('records')
temp=[]
for row in df_dict:
    name_new = row['name'].strip()
    temp.append(name_new)

對(duì)數(shù)據(jù)集的字典格式進(jìn)行處理后耗時(shí)「25.5秒」,這比iterrows()函數(shù)快77倍。

使用 apply()

apply() 是內(nèi)置的Pandas函數(shù),它允許傳遞一個(gè)函數(shù)并將其應(yīng)用于Pandas系列的每個(gè)值。apply()函數(shù)本身并不快,但是它對(duì)Pandas庫(kù)有很大的改進(jìn),因?yàn)樵摵瘮?shù)有助于根據(jù)所需條件隔離數(shù)據(jù)。

temp = df['name'].apply(lambda x: x.strip())

apply() 函數(shù)執(zhí)行耗時(shí)「4.60秒」,比iterrows() 函數(shù)快427倍。

結(jié)論

在本文中,我們討論了在Pandas數(shù)據(jù)幀上進(jìn)行優(yōu)化的幾種技術(shù),并比較了它們的時(shí)間復(fù)雜度。建議在非常特殊的情況下使用iterrows()函數(shù)。

可以輕松地從使用iterrows()或索引方法轉(zhuǎn)變?yōu)榛谧值涞牡夹g(shù),該技術(shù)將工作流程的速度提高了77倍。Apply函數(shù)的速度提高了約400倍,但用途有限,人們需要對(duì)代碼進(jìn)行大量更改才能轉(zhuǎn)換為這種方法。


 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多