apply、applymap、agg、transform、map對比

apply()

apply()屬于DataFrame、Series對象的方法,可以針對DataFrame中的行數(shù)據(jù)或列數(shù)據(jù)、以及Series中數(shù)據(jù)應用操作。對DataFrame時,默認axis=0時,以列為單位進行操作;axis=1時,以行為單位進行操作??墒褂镁酆虾瘮?shù)。

import pandas as pd
import numpy as np

frame = pd.DataFrame(np.random.rand(4, 3), columns = list('abc'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
# 輸出如下:
#                a         b         c
# Utah    0.443188  0.919623  0.550259
# Ohio    0.013923  0.557696  0.723975
# Texas   0.865469  0.720604  0.081306
# Oregon  0.506174  0.212421  0.061561


func = lambda x: x.max() - x.min()
print(frame.apply(func))
# 輸出如下:
# a    0.851545
# b    0.707202
# c    0.662415
# dtype: float64

applymap()

applymap()是pandas里DataFrame的方法,它對DataFrame中的所有元素應用操作,不能使用聚合函數(shù)。

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.rand(4, 3), columns = list('abc'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
# 輸出如下:
#                a         b         c
# Utah    0.443188  0.919623  0.550259
# Ohio    0.013923  0.557696  0.723975
# Texas   0.865469  0.720604  0.081306
# Oregon  0.506174  0.212421  0.061561
#注意使用applymap()可以格式化字符串,使用apply()會報錯,可采用函數(shù)的方法達到相同的目的。
func = lambda x: f'{x:.2f}%'
print(frame.applymap(func))

# 輸出如下:
#             a      b      c
# Utah    0.34%  0.43%  0.67%
# Ohio    0.75%  0.50%  0.14%
# Texas   0.68%  0.28%  0.90%
# Oregon  0.05%  0.86%  0.78%

agg()

agg()屬于DataFrame、Series對象的方法,可與聚合函數(shù)一起使用,例如sum、avg、count等。

#對dataframe指定列進行指定的聚合運算
df = pd.DataFrame([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [np.nan, np.nan, np.nan]],
                columns=['A', 'B', 'C'])
                
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})

#輸出:

        A    B
max   NaN  8.0
min   1.0  2.0
sum  12.0  NaN

transform()

transform()對DataFrame、Series的每個元素進行操作(以列為單元執(zhí)行),可與聚合函數(shù)一起使用,返回的DataFrame結(jié)構(gòu)和原數(shù)組一致。

df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
 df
   A  B
0  0  1
1  1  2
2  2  3

 df.transform(lambda x: x + 1)
   A  B
0  1  2
1  2  3
2  3  4

#transform使用多個自定義函數(shù)
df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
trans=df.transform([np.sqrt, np.exp])

          A                   B           
       sqrt       exp      sqrt        exp
0  0.000000  1.000000  1.000000   2.718282
1  1.000000  2.718282  1.414214   7.389056
2  1.414214  7.389056  1.732051  20.085537

map()

map()是python自帶的方法,可以在DataFrame中對具體的某一列使用.map()后綴的方式調(diào)用,對整個DataFrame使用會報錯,不能使用聚合函數(shù)。

import pandas as pd
import numpy as np

frame = pd.DataFrame(np.random.rand(4, 3), columns = list('abc'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
# 輸出如下:
#                a         b         c
# Utah    0.443188  0.919623  0.550259
# Ohio    0.013923  0.557696  0.723975
# Texas   0.865469  0.720604  0.081306
# Oregon  0.506174  0.212421  0.061561

func = lambda x: f'{x:.2f}%'
print(frame['a'].map(func))
# 輸出如下:
# Utah      0.65%
# Ohio      0.90%
# Texas     0.09%
# Oregon    0.72%
# Name: a, dtype: object

參考1
參考2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容