<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 1898字,需瀏覽 4分鐘

           ·

          2021-05-25 18:24

          點擊關(guān)注"Python學(xué)習(xí)與數(shù)據(jù)挖掘"

          更多超級干貨第一時間推送給你哦!!!

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

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

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

          處理速度

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

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

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

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

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

          按索引迭代

          數(shù)據(jù)框是具有行和列的Pandas對象。數(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)換為字典。現(xiàn)在,與iterrows()函數(shù)相比,在字典上進(jìn)行迭代相對非常快。

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

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

          使用 apply()

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

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

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

          結(jié)論

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

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




          相關(guān)閱讀:


          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香丁五月在线 | 神马久久樱桃 | 成人先锋影音AV黄色电影网 | 黄色视频在线免费观看高清视频 | 日韩乱论网站 |