Pandas的Apply函式具體使用
Pandas最好用的函式
Pandas是Python
語言中非常好用的一種資料結構包,包含了許多有用的資料操作方法。而且很多演算法相關的庫函式的輸入資料結構都要求是pandas
資料,或者有該資料的介面。
仔細看pandas的API說明文件,就會發現有好多有用的函式,比如非常常用的檔案的讀寫函式就包括如下函式:
Format Type | Data Description | Reader | Writer |
---|---|---|---|
text | CSV | read_csv | to_csv |
text | JSON | read_json | to_json |
text | HTML | read_html | to_html |
text | Local clipboard | read_clipboard | to_clipboard |
binary | MS Excel | read_excel | to_excel |
binary | HDF5 Format | read_hdf | to_hdf |
binary | Feather Format | read_feather | to_feather |
binary | Parquet Format | read_parquet | to_parquet |
binary | Msgpack | read_msgpack | to_msgpack |
binary | Stata | read_stata | to_stata |
binary | SAS | read_sas | |
binary | Python Pickle Format | read_pickle | to_pickle |
SQL | SQL | read_sql | to_sql |
SQL | Google Big Query | read_gbq | to_gbq |
讀取資料後,對於資料處理來說,有好多有用的相關操作的函式,但是我認為其中最好用的函式是下面這個函式:
apply函式
apply函式是`pandas`裡面所有函式中自由度最高的函式。該函式如下:
DataFrame.apply(func,axis=0,broadcast=False,raw=False,reduce=None,args=(),**kwds)
該函式最有用的是第一個引數,這個引數是函式,相當於C/C++
的函式指標。
這個函式需要自己實現,函式的傳入引數根據axis
來定,比如axis = 1
,就會把一行資料作為Series
的資料結構傳入給自己實現的函式中,我們在函式中實現對Series
不同屬性之間的計算,返回一個結果,則apply
函式會自動遍歷每一行DataFrame
的資料,最後將所有結果組合成一個Series
資料結構並返回。
比如讀取一個表格:
假如我們想要得到表格中的PublishedTime
和ReceivedTime
屬性之間的時間差資料,就可以使用下面的函式來實現:
import pandas as pd import datetime #用來計算日期差的包 def dataInterval(data1,data2): d1 = datetime.datetime.strptime(data1,'%Y-%m-%d') d2 = datetime.datetime.strptime(data2,'%Y-%m-%d') delta = d1 - d2 return delta.days def getInterval(arrLike): #用來計算日期間隔天數的呼叫的函式 PublishedTime = arrLike['PublishedTime'] ReceivedTime = arrLike['ReceivedTime'] # print(PublishedTime.strip(),ReceivedTime.strip()) days = dataInterval(PublishedTime.strip(),ReceivedTime.strip()) #注意去掉兩端空白 return days if __name__ == '__main__': fileName = "NS_new.xls"; df = pd.read_excel(fileName) df['TimeInterval'] = df.apply(getInterval,axis = 1)
有時候,我們想給自己實現的函式傳遞引數,就可以用的apply
函式的*args
和**kwds
引數,比如同樣的時間差函式,我希望自己傳遞時間差的標籤,這樣沒次標籤更改就不用修改自己實現的函數了,實現程式碼如下:
import pandas as pd import datetime #用來計算日期差的包 def dataInterval(data1,'%Y-%m-%d') delta = d1 - d2 return delta.days def getInterval_new(arrLike,before,after): #用來計算日期間隔天數的呼叫的函式 before = arrLike[before] after = arrLike[after] # print(PublishedTime.strip(),ReceivedTime.strip()) days = dataInterval(after.strip(),before.strip()) #注意去掉兩端空白 return days if __name__ == '__main__': fileName = "NS_new.xls"; df = pd.read_excel(fileName) df['TimeInterval'] = df.apply(getInterval_new,axis = 1,args = ('ReceivedTime','PublishedTime')) #呼叫方式一 #下面的呼叫方式等價於上面的呼叫方式 df['TimeInterval'] = df.apply(getInterval_new,**{'before':'ReceivedTime','after':'PublishedTime'}) #呼叫方式二 #下面的呼叫方式等價於上面的呼叫方式 df['TimeInterval'] = df.apply(getInterval_new,before='ReceivedTime',after='PublishedTime') #呼叫方式三
修改後的getInterval_new
函式多了兩個引數,這樣我們在使用apply
函式的時候要自己傳遞引數,程式碼中顯示的三種傳遞方式都行。
最後,本篇的全部程式碼在下面這個網頁可以下載:
https://github.com/Dongzhixiao/Python_Exercise/tree/master/pandas_apply
到此這篇關於Pandas的Apply函式具體使用的文章就介紹到這了,更多相關Pandas Apply函式內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!