您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Pandas中map(),applymap(),apply()函數如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Pandas中map(),applymap(),apply()函數如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
將函數應用于pandas對象(pandas.DataFrame,pandas.Series)時,根據所應用的函數類型以及是否將其應用于元素,行或列,使用的方法會有所不同。
指定pandas對象作為NumPy函數的參數
將Pandas對象指定為函數參數
是否將其應用于元素,行或列取決于函數的類型和參數的設置而有所不同
Pandas對象中的一些方法
Pandas對象方法的函數應用
元素功能(標量值)
適用于Series的每個元素:map(),apply()
應用于DataFrame的每個元素:applymap()
行和列的功能(一維數組)
應用于DataFrame的每行和每列:apply()
用以下csv文件作為示例進行說明。
a,b,c,d
11,12,13,14
21,22,23,24
31,32,33,34
import pandas as pd import numpy as np df = pd.read_csv('./data/06/sample_header.csv') print(df) # a b c d # 0 11 12 13 14 # 1 21 22 23 24 # 2 31 32 33 34
可以將Pandas對象指定為NumPy函數的參數。
NumPy的通用函數(ufunc:應用于數組元素的函數)適用于pandas對象的每個元素。
絕對值(fabs()),平方根(sqrt()),log(log())等。
print(np.sqrt(df)) # a b c d # 0 3.316625 3.464102 3.605551 3.741657 # 1 4.582576 4.690416 4.795832 4.898979 # 2 5.567764 5.656854 5.744563 5.830952
如果將pandas對象指定為從NumPy數組的所有元素計算值的函數的參數,則默認情況下它將應用于pandas對象的每列。如果參數軸= 1,則將其應用于每行。
最大值(amax()),最小值(amin()),平均值(mean())等。
print(np.amax(df)) # a 31 # b 32 # c 33 # d 34 # dtype: int64 print(np.mean(df, axis=1)) # 0 12.5 # 1 22.5 # 2 32.5 # dtype: float64
最大值,最小值,平均值,方差等也被準備為Pandas對象的方法,因此也可以直接使用它們。
同樣,在這種情況下,默認情況下也會將其應用于每一列,并且如果參數axis = 1,則會將其應用于每一行。
print(df.max()) # a 31 # b 32 # c 33 # d 34 # dtype: int64 print(df.max(axis=1)) # 0 14 # 1 24 # 2 34 # dtype: int64
可以使用pandas對象方法將函數應用于元素,行和列。您可以應用Python內置函數或您定義的函數。
應用于Series的每個元素:map(),apply()
應用于DataFrame的每個元素:applymap()
應用于DataFrame的每行和每列:apply()
應用于DataFrame的特定行/列元素
以上方法都返回一個新的已處理的對象,而原始對象則保持不變。沒有像dropna()或fillna()那樣的參數,因此,如果想更改原始對象本身時,
df = df.applymap(function)
如上,用原始對象替換新對象并覆蓋它。
將Python內置函數,匿名函數(lambda)或def定義的函數傳遞給map()或apply()的參數。
s = df['a'] print(s) # 0 11 # 1 21 # 2 31 # Name: a, dtype: int64 f_brackets = lambda x: '[{}]'.format(x) print(s.map(f_brackets)) # 0 [11] # 1 [21] # 2 [31] # Name: a, dtype: object def f_str(x): return str(x).replace('1', 'One').replace('2', 'Two').replace('3', 'Three').replace('4', 'Four') print(s.map(f_str)) # 0 OneOne # 1 TwoOne # 2 ThreeOne # Name: a, dtype: object
對于map(),如果將字典dict指定為參數,它將替換為元素。
將Python的內置函數,匿名函數(lambda)或def定義的函數傳遞為applymap()的參數。
f_oddeven = lambda x: 'odd' if x % 2 == 1 else 'even' print(df.applymap(f_oddeven)) # a b c d # 0 odd even odd even # 1 odd even odd even # 2 odd even odd even
將適用于一維數組的函數傳遞給apply()的參數。默認情況下,它應用于每列,如果axis = 1,則應用于每行。
f_maxmin = lambda x: max(x) - min(x) print(df.apply(f_maxmin)) # a 20 # b 20 # c 20 # d 20 # dtype: int64 print(df.apply(f_maxmin, axis=1)) # 0 3 # 1 3 # 2 3 # dtype: int64
由于沒有方法僅將功能應用于DataFrame的特定行/列元素,可執行以下方法。
選擇行/列并應用帶有map()或apply()的功能
覆蓋原始行/列
df['b'] = df['b'].map(f_str) print(df) # a b c d # 0 11 OneTwo 13 14 # 1 21 TwoTwo 23 24 # 2 31 ThreeTwo 33 34 df.iloc[2] = df.iloc[2].map(f_str) print(df) # a b c d # 0 11 OneTwo 13 14 # 1 21 TwoTwo 23 24 # 2 ThreeOne ThreeTwo ThreeThree ThreeFour
讀到這里,這篇“Pandas中map(),applymap(),apply()函數如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。