Pandas中map(),applymap(),apply()函數(shù)的使用方法
將函數(shù)應用于pandas對象(pandas.DataFrame,pandas.Series)時,根據(jù)所應用的函數(shù)類型以及是否將其應用于元素,行或列,使用的方法會有所不同。
指定pandas對象作為NumPy函數(shù)的參數(shù)
- 將Pandas對象指定為函數(shù)參數(shù)
- 是否將其應用于元素,行或列取決于函數(shù)的類型和參數(shù)的設置而有所不同
- Pandas對象中的一些方法
Pandas對象方法的函數(shù)應用
元素功能(標量值)
- 適用于Series的每個元素:map(),apply()
- 應用于DataFrame的每個元素:applymap()
行和列的功能(一維數(shù)組)
- 應用于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函數(shù)的參數(shù)
可以將Pandas對象指定為NumPy函數(shù)的參數(shù)。
元素的應用
NumPy的通用函數(shù)(ufunc:應用于數(shù)組元素的函數(shù))適用于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數(shù)組的所有元素計算值的函數(shù)的參數(shù),則默認情況下它將應用于pandas對象的每列。如果參數(shù)軸= 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.DataFrame,pandas.Series方法
最大值,最小值,平均值,方差等也被準備為Pandas對象的方法,因此也可以直接使用它們。
同樣,在這種情況下,默認情況下也會將其應用于每一列,并且如果參數(shù)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對象方法的函數(shù)應用
可以使用pandas對象方法將函數(shù)應用于元素,行和列。您可以應用Python內置函數(shù)或您定義的函數(shù)。
- 應用于Series的每個元素:map(),apply()
- 應用于DataFrame的每個元素:applymap()
- 應用于DataFrame的每行和每列:apply()
- 應用于DataFrame的特定行/列元素
以上方法都返回一個新的已處理的對象,而原始對象則保持不變。沒有像dropna()或fillna()那樣的參數(shù),因此,如果想更改原始對象本身時,
df = df.applymap(function)
如上,用原始對象替換新對象并覆蓋它。
適用于Series的每個元素:map(),apply()
將Python內置函數(shù),匿名函數(shù)(lambda)或def定義的函數(shù)傳遞給map()或apply()的參數(shù)。
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指定為參數(shù),它將替換為元素。
應用于DataFrame的每個元素:applymap()
將Python的內置函數(shù),匿名函數(shù)(lambda)或def定義的函數(shù)傳遞為applymap()的參數(shù)。
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
應用于DataFrame的每行和每列:apply()
將適用于一維數(shù)組的函數(shù)傳遞給apply()的參數(shù)。默認情況下,它應用于每列,如果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的特定行/列元素
由于沒有方法僅將功能應用于DataFrame的特定行/列元素,可執(zhí)行以下方法。
- 選擇行/列并應用帶有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()函數(shù)的使用方法的文章就介紹到這了,更多相關Pandas map(),applymap(),apply()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python爬蟲Xpath定位數(shù)據(jù)的兩種方法
這篇文章主要介紹了Python爬蟲Xpath定位數(shù)據(jù)的方法,第一種方法直接右鍵,將文章路徑復制下來點擊Copy?full?Xpath,方法二使用@制定標簽屬性,搜索指定位置,每種方法給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07
PyTorch的自適應池化Adaptive Pooling實例
今天小編就為大家分享一篇PyTorch的自適應池化Adaptive Pooling實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python 在服務器上調用數(shù)據(jù)庫特別慢的解決過程
這篇文章主要介紹了python 在服務器上調用數(shù)據(jù)庫特別慢的解決過程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Python利用filestools模塊實現(xiàn)水印添加
最近發(fā)現(xiàn)的這款filestools非標準庫其實真正實現(xiàn)添加水印的只要一個函數(shù)的調用,一行代碼即可完成水印的添加,感興趣的快跟隨小編一起學起來吧2022-09-09
Python Scrapy多頁數(shù)據(jù)爬取實現(xiàn)過程解析
這篇文章主要介紹了Python Scrapy多頁數(shù)據(jù)爬取實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06

