一、df.apply函數(shù)簡(jiǎn)介
df.apply函數(shù)是Pandas中一個(gè)非常強(qiáng)大的函數(shù),它允許我們對(duì)DataFrame的每一行或者每一列分別應(yīng)用一個(gè)自定義的函數(shù),然后將結(jié)果合并成一個(gè)新的DataFrame對(duì)象。
df.apply函數(shù)具體的語法如下:
df.apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), \*\*kwds)
其中各參數(shù)的含義如下:
func:要應(yīng)用的函數(shù),可以是Python內(nèi)置函數(shù)、Lambda表達(dá)式或自定義函數(shù)。 axis:表示DataFrame沿著行還是列的方向應(yīng)用函數(shù),0表示列,1表示行,缺省值為0。 broadcast:是否將函數(shù)應(yīng)用到整個(gè)DataFrame,默認(rèn)為None。 raw:是否直接傳遞原始的NumPy數(shù)據(jù),默認(rèn)為False。 reduce:是否啟用縮減機(jī)制,默認(rèn)為None。 result_type:返回值的類型,默認(rèn)為None。 args:額外的參數(shù)傳遞給函數(shù)。 kwds:關(guān)鍵字參數(shù)傳遞給函數(shù)。二、按行或按列應(yīng)用函數(shù)
根據(jù)axis參數(shù)的不同,df.apply函數(shù)可以實(shí)現(xiàn)按行或按列應(yīng)用函數(shù),下面分別進(jìn)行闡述。
三、應(yīng)用自定義函數(shù)
除了Python內(nèi)置函數(shù)和Lambda表達(dá)式,還可以應(yīng)用自定義函數(shù)來進(jìn)行計(jì)算,下面是一個(gè)簡(jiǎn)單的例子:
# 導(dǎo)入必要的庫
import pandas as pd
# 定義一個(gè)DataFrame對(duì)象
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 定義一個(gè)自定義函數(shù),將每一列的最大值與最小值相加
def my_func(x):
return x.max() + x.min()
# 對(duì)DataFrame對(duì)象進(jìn)行函數(shù)應(yīng)用
df.apply(my_func)
以上代碼的輸出結(jié)果如下:
A 4
B 9
C 16
dtype: int64
從輸出結(jié)果可以看到,將每一列的最大值與最小值相加得到了一個(gè)新的Series對(duì)象。
四、應(yīng)用帶參數(shù)的函數(shù)
在使用df.apply函數(shù)的時(shí)候,還可以傳遞額外的參數(shù)給被應(yīng)用的函數(shù),下面是一個(gè)簡(jiǎn)單的例子:
# 導(dǎo)入必要的庫
import pandas as pd
# 定義一個(gè)DataFrame對(duì)象
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 定義一個(gè)帶參數(shù)的函數(shù),將每一列的數(shù)據(jù)乘以特定的因子
def my_func(x, factor):
return x * factor
# 對(duì)DataFrame對(duì)象進(jìn)行函數(shù)應(yīng)用
df.apply(my_func, args=(2,))
以上代碼的輸出結(jié)果如下:
A B C
0 2 8 14
1 4 10 16
2 6 12 18
從輸出結(jié)果可以看到,將每一列的數(shù)據(jù)乘以2得到了一個(gè)新的DataFrame對(duì)象。
五、應(yīng)用多個(gè)函數(shù)
df.apply函數(shù)還支持同時(shí)應(yīng)用多個(gè)函數(shù)來進(jìn)行計(jì)算,下面是一個(gè)簡(jiǎn)單的例子:
# 導(dǎo)入必要的庫
import pandas as pd
# 定義一個(gè)DataFrame對(duì)象
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 定義兩個(gè)函數(shù),將每一列的數(shù)據(jù)分別乘以2和減去平均值
def func1(x):
return x * 2
def func2(x):
return x - x.mean()
# 對(duì)DataFrame對(duì)象進(jìn)行函數(shù)應(yīng)用
df.apply([func1, func2])
以上代碼的輸出結(jié)果如下:
A B C
func1 func2 func1 func2 func1 func2
0 2 -1.0 8 -1.0 14 -1.0
1 4 0.0 10 0.0 16 0.0
2 6 1.0 12 1.0 18 1.0
從輸出結(jié)果可以看到,將每一列的數(shù)據(jù)分別乘以2和減去平均值得到了一個(gè)新的DataFrame對(duì)象。
六、總結(jié)
df.apply函數(shù)是Pandas中一個(gè)非常實(shí)用的函數(shù),可以幫助我們快速進(jìn)行數(shù)據(jù)處理和轉(zhuǎn)換。它提供了非常豐富的參數(shù)和選項(xiàng),方便我們進(jìn)行靈活的操作。在實(shí)際的數(shù)據(jù)分析和處理過程中,df.apply函數(shù)是經(jīng)常使用的一個(gè)函數(shù),掌握它的使用方法對(duì)于提高數(shù)據(jù)分析和處理的效率是非常有幫助的。