<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給skura
      發送

      0

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      本文作者: skura 2019-08-29 16:22
      導語:Pandas DataFrame 循環可能非常慢,本文將向你展示一些非常快的方法

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那么不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。

      標準循環

      數據幀是具有行和列的 pandas 對象。如果使用循環,則將遍歷整個對象。python 不能用任何內置函數,而且速度非常慢。在我們的示例中,我們得到了一個具有 65 列和 1140 行的數據幀,它包含 2016-2019 賽季的足球比賽結果。我們要創建一個新的列來指示某個特定的隊是否打過平局。我們可以這樣開始:

      leaguedf['Draws'] = 99999    


      for row in range(0, len(leaguedf)):    


      if ((leaguedf['HomeTeam'].iloc[row] == TEAM) & (leaguedf['FTR'].iloc[row] == 'D')) | \    


      ((leaguedf['AwayTeam'].iloc[row] == TEAM) & (leaguedf['FTR'].iloc[row] == 'D')):    


      leaguedf['Draws'].iloc[row] = 'Draw'    


      elif ((leaguedf['HomeTeam'].iloc[row] == TEAM) & (leaguedf['FTR'].iloc[row] != 'D')) | \    


      ((leaguedf['AwayTeam'].iloc[row] == TEAM) & (leaguedf['FTR'].iloc[row] != 'D')):    


      leaguedf['Draws'].iloc[row] = 'No_Draw'    


      else:    


      leaguedf['Draws'].iloc[row] = 'No_Game'

      def soc_loop(leaguedf,TEAM,):   

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      因為我們的數據框架中包含了英超的每一場比賽,所以我們必須檢查我們感興趣的球隊(阿森納)是否參加過比賽,是否適用,他們是主隊還是客隊。如你所見,這個循環非常慢,需要 207 秒才能執行。讓我們看看如何提高效率。

      pandas 內置函數:iterrow()——快 321 倍

      在第一個示例中,我們循環訪問了整個數據幀。iterrows()為每行返回一個序列,因此它以一對索引的形式在數據幀上迭代,而感興趣的列以序列的形式迭代。這使得它比標準循環更快:

      def soc_iter(TEAM,home,away,ftr):

              #team, row['HomeTeam'], row['AwayTeam'], row['FTR']   

              if [((home == TEAM) & (ftr == 'D')) | ((away == TEAM) & (ftr == 'D'))]:   

                      result = 'Draw'   

             elif [((home == TEAM) & (ftr != 'D')) | ((away == TEAM) & (ftr != 'D'))]:   

                    result = 'No_Draw'   

             else:   

                    result = 'No_Game'   

             return result

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      代碼運行需要 68 毫秒,比標準循環快 321 倍。但是,許多人建議不要使用它,因為仍然有更快的方法,并且 iterrows() 不保留跨行的數據類型。這意味著,如果在數據幀上使用 iterrow(),則可以更改數據類型,這會導致很多問題。要保留數據類型,還可以使用 itertuples()。我們不會在這里詳細討論,因為我們要關注效率。你可以在這里找到官方文件:

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.itertuples.html?source=post_page-----805030df4f06----------------------

      apply()方法——快 811 倍

      apply 本身并不快,但與數據幀結合使用時具有優勢。這取決于應用表達式的內容。如果可以在 Cython 空間中執行,則速度會更快(在這里就是這種情況)。

      我們可以將 apply 與 Lambda 函數一起使用。我們要做的就是指定軸。在這種情況下,我們必須使用 axis=1,因為我們要執行一個列操作:

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      此代碼甚至比以前的方法更快,只需要 27 毫秒就能完成。

      pandas 矢量化——快 9280 倍

      現在我們可以討論一個新話題了。我們利用矢量化的優點來創建真正快速的代碼。重點是避免像前面的例子 [1] 中那樣的 Python 級循環,并使用優化的 C 代碼,這個代碼使用內存的效率更高。我們只需要稍微修改函數:

      df['Draws'] = 'No_Game'   

              df.loc[((home == TEAM) & (ftr == 'D')) | ((away == TEAM) & (ftr == 'D')), 'Draws'] = 'Draw'   

             df.loc[((home == TEAM) & (ftr != 'D')) | ((away == TEAM) & (ftr != 'D')), 'Draws'] = 'No_Draw'

             def soc_iter(TEAM,home,away,ftr):   

      現在我們可以用 pandas series 作為輸入創建新列:

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      在這種情況下,我們甚至不需要循環。我們要做的就是調整函數的內容。現在我們可以直接將 pandas series 傳遞給我們的函數,這會導致巨大的速度增益。

      Numpy 矢量化——速度快 71.803 倍

      在前面的示例中,我們將 pandas series 傳遞給了函數。通過添加.values,我們收到一個 Numpy 數組:

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      Numpy 數組非常快,我們的代碼運行時間為 0305 毫秒,比開始使用的標準循環快 71803 倍。

      結論

      如果您使用 python、pandas 和 Numpy 進行數據分析,那么代碼總會有一些改進空間。我們比較了五種不同的方法,在計算的基礎上增加了一個新的列到我們的數據框架中。我們注意到在速度方面存在巨大差異:

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      如果你從這篇文章中選擇兩條規則,我會很高興:

      • 如果確定需要使用循環,則應始終選擇 apply 方法

      • 否則,矢量化總是更好的,因為它更快

      via:https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06

      雷鋒網雷鋒網

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      數據處理必看:如何讓你的 pandas 循環加快 71803 倍

      分享:
      相關文章
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 久久99国产乱子伦精品免费 | 91日日剧网| 国产av中文字幕| 国产人妻人伦精品一区二区| 久久精品国产亚洲av热一区 | 亚洲中文字幕无码二区在线| 在线日韩一区二区| 99re经典视频在线| 国产伦精品一区二区三区免费| 平江县| 正在播放国产真实哭都没用| 欧美福利极品| 热久久视久久精品2019| 正在播放肥臀熟妇在线视频| 久久99精品久久久久久9 | 3p人妻少妇对白精彩视频| 欧美丰满熟妇hdxx| 亚洲video| 国产精品一卡二卡三卡| 国产女人看国产在线女人| 久久国产一区二区日韩av| 精品久久久久久无码国产| 洗澡被公强奷30分钟视频| 中文字幕日本最新乱码视频| 青青青亚洲精品国产| 女高中生自慰污污网站| 久久999| 丰满熟女人妻一区二区三| 超碰人人摸| 色欲人妻综合网| 精品偷拍| 国模大胆一区二区三区| 风韵丰满妇啪啪区老老熟女杏吧| 国语偷拍视频一区二区三区| 香蕉在线精品一区二区| 日本中文字幕有码在线视频| 人妻[21p]大胆| 18亚洲AV无码成人网站国产| 亚欧美无遮挡hd高清在线视频| 欧洲亚洲一区| 日本丶国产丶欧美色综合|