在復習之前學習的pandas代碼時發現這句話 df_clean.apply(pd.to_numeric, errors='ignore') 感到十分疑惑,apply()是什么函數,pd.to_numeric又是啥,errors=""有啥作用。
接下來一一解答:
一、map(), apply()和applymap()
1.map():
map() 是一個Series的函數,DataFrame結構中沒有map()。map()將一個自定義函數應用於Series結構中的每個元素(elements)。
下面舉一個例子 將w列都加1
test1=pd.DataFrame(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("WXYZ"))#先構造一個隨機的測試數據 print(test1) test1["W"]=test1["W"].map(lambda x:x+1)#將w列的數都加1 # #lambda在這里其實是在定義一個簡單的函數,一個沒有函數名的函數 print(test1)
2.apply():
apply()將一個函數作用於DataFrame中的每個行或者列
下面我們將w,x列相加
按列相加
test1['total'] = test1[['W', 'X']].apply(lambda x: x.sum(), axis=1)#按列相加 print(test1)
按行相加
test1.loc['total'] = test1[['W', 'X']].apply(lambda x: x.sum(), axis=0)#按行相加 print(test1)
3.applymap():
將函數做用於DataFrame中的所有元素(elements)
將所有元素都加5
def addFive(X): return X+5
test1=test1.applymap(addFive) print(test1)
二、pd.to_numeric
將參數轉換為數字類型。
errors中參數的解釋:
'raise'參數:無效的解析將引發異常
'corece'參數:將無效解析設置為NaN
'ignore'參數:無效的解析將返回輸入
先構造數據
s = pd.Series(['test', '1.0', '2', '2021-12-5', 1, False, None, pd.Timestamp('2021-12-05')]) print(s)
執行raise會報錯,因為該數據里面有非數字
pd.to_numeric(s,errors="raise")
執行ignore只對數字字符串轉型,其他不轉換
pd.to_numeric(s,errors="ignore")
執行coerce會將時間,bool,數字字符串轉換為數字,其他為NaN
pd.to_numeric(s,errors="coerce")