怎么提高Pandas的運行速度

這篇文章給大家分享的是有關怎么提高Pandas的運行速度的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在雜多等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站設計制作、網站建設 網站設計制作按需制作,公司網站建設,企業網站建設,成都品牌網站建設,成都營銷網站建設,成都外貿網站建設公司,雜多網站建設費用合理。

1、數據讀取的優化

讀取數據是進行數據分析前的一個必經環節,pandas中也內置了許多數據讀取的函數,最常見的就是用pd.read_csv()函數從csv文件讀取數據。pkl格式的數據的讀取速度最快,所以對于日常的數據集(大多為csv格式),可以先用pandas讀入,然后將數據轉存為pkl或者hdf格式,之后每次讀取數據時候,便可以節省一些時間。代碼如下:

import pandas as pd

#讀取csv

df = pd.read_csv('xxx.csv')

#pkl格式

df.to_pickle('xxx.pkl') #格式另存

df = pd.read_pickle('xxx.pkl') #讀取

#hdf格式

df.to_hdf('xxx.hdf','df') #格式另存

df = pd.read_hdf('xxx.pkl','df') #讀取

2、進行聚合操作時的優化

在使用 agg 和 transform 進行操作時,盡量使用Python的內置函數,能夠提高運行效率。(數據用的還是上面的測試用例)

(1)agg+Python內置函數

怎么提高Pandas的運行速度

(2)agg+非內置函數

怎么提高Pandas的運行速度

可以看到對 agg 方法,使用內置函數時運行效率提升了60%。

(3)transform+Python內置函數

怎么提高Pandas的運行速度

(4)transform+非內置函數

怎么提高Pandas的運行速度

對 transform 方法而言,使用內置函數時運行效率提升了兩倍。

3、對數據進行逐行操作時的優化

假設我們現在有這樣一個電力消耗數據集,以及對應時段的電費價格。數據集記錄著每小時的電力消耗,如第一行代表2001年1月13日零點消耗了0.586kwh的電。不同使用時段的電費價格不一樣,我們現在的目的是求出總的電費,那么就需要將對應時段的單位電費×消耗電量。下面給出了三種寫法,我們分別測試這三種處理方式,對比一下這三種寫法有什么不同,代碼效率上有什么差異。

#編寫求得相應結果的函數

def get_cost(kwh, hour):

if 0 <= hour < 7:

rate = 0.6

elif 7 <= hour < 17:

rate = 0.68

elif 17 <= hour < 24:

rate = 0.75

else:

raise ValueError(f'Invalid hour: {hour}')

return rate * kwh

#方法一:簡單循環

def loop(df):

cost_list = []

for i in range(len(df)):

energy_used = df.iloc[i]['energy_kwh']

hour = df.iloc[i]['date_time'].hour

energy_cost = get_cost(energy_used, hour)

cost_list.append(energy_cost)

df['cost'] = cost_list

#方法二:apply方法

def apply_method(df):

df['cost'] = df.apply(

lambda row: get_cost(

kwh=row['energy_kwh'],

hour=row['date_time'].hour),

axis=1)

#方法三:采用isin篩選出各時段,分段處理

df.set_index('date_time', inplace=True)

def isin_method(df):

peak_hours = df.index.hour.isin(range(17, 24))

simple_hours = df.index.hour.isin(range(7, 17))

off_peak_hours = df.index.hour.isin(range(0, 7))

df.loc[peak_hours, 'cost'] = df.loc[peak_hours, 'energy_kwh'] * 0.75

df.loc[simple_hours,'cost'] = df.loc[simple_hours, 'energy_kwh'] * 0.68

df.loc[off_peak_hours,'cost'] = df.loc[off_peak_hours, 'energy_kwh'] * 0.6

測試結果:

可以看到,采用 isin() 篩選出對應數據后分開計算的速度是簡單循環的近606倍,這并不是說 isin() 有多厲害,方法三速度快是因為它采用了向量化的數據處理方式(這里的isin() 是其中一種方式,還有其他方式,大家可以嘗試一下) ,這才是重點。

4、使用numba進行加速

如果在你的數據處理過程涉及到了大量的數值計算,那么使用numba可以大大加快代碼的運行效率,numba使用起來也很簡單,下面給大家演示一下。(代碼處理不具有實際意義,只是展示一下效果)

首先需要安裝numba模塊

>>>pip install numba

我們用一個簡單的例子測試一下numba的提速效果

import numba

@numba.vectorize

def f_with_numba(x):

return x * 2

def f_without_numba(x):

return x * 2

#方法一:apply逐行操作

df["double_energy"] = df.energy_kwh.apply(f_without_numba)

#方法二:向量化運行

df["double_energy"] = df.energy_kwh*2

#方法三:運用numba加速

#需要以numpy數組的形式傳入

#否則會報錯

df["double_energy"] = f_with_numba(df.energy_kwh.to_numpy())

從測試結果來看,再次凸顯出向量化處理的優勢,同時numba對原本速度已經很快的向量化處理也能提高一倍多的效率。

感謝各位的閱讀!關于“怎么提高Pandas的運行速度”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

當前名稱:怎么提高Pandas的運行速度
轉載來源:http://m.kartarina.com/article10/pihjdo.html

成都網站建設公司_創新互聯,為您提供服務器托管Google網站內鏈用戶體驗定制網站網站設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設
主站蜘蛛池模板: 曰批全过程免费视频在线观看无码| 久久久久亚洲av无码尤物| 无码专区中文字幕无码| 尤物永久免费AV无码网站| 亚洲成a人无码亚洲成av无码| 国产AV天堂无码一区二区三区| 国产激情无码一区二区三区| 亚洲AV无码一区二区三区DV| 无码中文字幕色专区| 亚洲AV无码成人精品区在线观看| 无码人妻丰满熟妇区毛片| 麻豆aⅴ精品无码一区二区| 影院无码人妻精品一区二区 | 日韩人妻无码精品一专区| 国语成本人片免费av无码| 色综合久久无码五十路人妻| 亚洲av无码成人精品区在线播放| 无码国产精品一区二区免费式影视 | 精品无码国产一区二区三区51安| 国产AV无码专区亚洲AV毛网站 | 免费无码H肉动漫在线观看麻豆| 精品无码人妻一区二区三区| 亚洲精品无码久久久久去q| 无码人妻精品一区二区蜜桃百度| 亚洲成无码人在线观看| 无码日韩精品一区二区免费暖暖| 久久久91人妻无码精品蜜桃HD| 永久免费av无码网站大全| 亚洲私人无码综合久久网| 无码国产精品一区二区免费式直播| 亚洲av无码精品网站| 亚洲AV永久无码精品水牛影视| 亚洲一区爱区精品无码| 国产AV无码专区亚洲AV漫画| 宅男在线国产精品无码| 国产亚洲精久久久久久无码| 久久久久久亚洲av成人无码国产| 亚洲AV无码国产在丝袜线观看| 久久久久久久无码高潮 | 免费看国产成年无码AV片| 男男AV纯肉无码免费播放无码|