本文介紹一下關於 Pandas 中 apply() 函數的幾個常見用法,apply() 函數的自由度較高,可以直接對 Series 或者 DataFrame 中元素進行逐元素遍歷操作,方便且高效,具有類似於 Numpy 的特性。
apply() 使用時,通常放入一個 lambda 函數表達式、或一個函數作為操作運算,官方上給出的 apply() 用法:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds
func 代表的是傳入的函數或 lambda 表達式;
axis 參數可提供的有兩個,該參數默認為0/列
0 或者 index ,表示函數處理的是每一列;
1 或 columns ,表示處理的是每一行;
raw ;bool 類型,默認為 False;
False ,表示把每一行或列作為 Series 傳入函數中;
True,表示接受的是 ndarray 數據類型;
apply() 最後的是經過函數處理,數據以 Series 或 DataFrame 格式返回。
下面用幾個例子來介紹一下 apply() 的具體使用;
DataFrame 使用apply()1,計算每個元素的平方根
這裡為了方便,直接用到 numpy 的 sqrt 函數;
>>> df =pd.DataFrame([[4,9]]*3,columns = ['A','B'])
>>> df
A B
0 4 9
1 4 9
2 4 9
>>> df.apply(np.sqrt)
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
2,計算每一行元素的平均值
這裡傳入數據是以列的形式存在的,所以 axis = 0,即可以省略;
>>> df.apply(np.mean)
A 4.0
B 9.0
3,計算每一列元素的平均值
與 2 不同的是這裡以行的行形式傳入,要加一個參數 axis =1;
>>> df.apply(np.mean,axis = 1)
0 6.5
1 6.5
2 6.5
dtype: float64
4,添加新列C,其值分別為列A、B之和
實現這個功能,最簡單的一行代碼即可實現:
df['C'] = df.A +df.B
但這裡要用 apply() 來實現,實現對列間操作的用法,操作步驟分為下面兩步:
1,先定義一個函數實現 列A + 列B ;
2,利用apply() 添加該函數,且數據需要逐行加入,因此設置axis = 1
>>> def Add_a(x):
... return x.A+x.B
>>> df['C'] = df.apply(Add_a,axis=1)
>>> df
A B C
0 4 9 13
1 4 9 13
2 4 9 13
Series 使用 apply() 函數與 DataFrame 相似,用法上最大區別就是加了一個列名 DataFram.類名
1,列 A 中所有元素加 1
不用 apply() 的方法
df.A =df.A +1
利用 apply() 函數進行操作,這裡我傳入一個 lambda 函數:
>>> df.A = df.A.apply(lambda x:x+1)
>>> df
A B C
0 5 9 13
1 5 9 13
2 5 9 13
2,判斷列 A 中元素是否能夠被2整除,用 Yes 或 No在旁邊標註
>>> df.A = df.A.apply(lambda x:str(x)+"\tYes" if x%2==0 else str(x)+"\tNo")
>>> df
A B
0 5\tNo 9
1 5\tNo 9
2 5\tNo 9
apply() 的大部分用法都是上面幾點,這裡列的例子較簡單一些,但對於基礎用法理解上來說已經足夠了。
以上就是本文的所有內容,最後感謝大家閱讀!
推薦閱讀: