apply 是非常常用的一個函數(shù),在處理數(shù)據(jù)過程中非常有效疼鸟。因此,在此做一個分享總結(jié)。
在處理過程中憎兽,最麻煩的其實是涉及 axis =0 或者1 的問題。
在說明之前非常有必要要說明axis 的定義問題
df=pd.DataFrame({'a':[1,4],'b':[2,5],'c':[3,6]})
index | a | b | c |
---|---|---|---|
1 | 1 | 2 | 3 |
2 | 4 | 5 | 6 |
再提前要說明下apply 的運(yùn)行機(jī)制读恃,apply 后面會傳進(jìn)去一個向量愕鼓,然后函數(shù)作用在這個向量上進(jìn)行計算,然后會傳出一個值或者向量或者其他需曾,需要其他相應(yīng)格式再承接出來吗坚。
然后要再區(qū)分開一個不同就是apply 作用的向量是row還是columns,如果是row那么axis=1,如果是columns祈远,那么axis=0,(切記)商源,而且axis=0 车份,永遠(yuǎn)都是默認(rèn)值。
然后再看牡彻,如果是axis=0扫沼,那么作用的是列,那么你會發(fā)現(xiàn)結(jié)果所有的行進(jìn)行計算(就是說那么多行會發(fā)生擠壓或者壓縮或者擴(kuò)張之類的變化)庄吼。
如下所示:
df.apply(np.sum)# 變成一個series
index | a |
---|---|
a | 5 |
b | 7 |
c | 9 |
或者也可以變成一個dataframe,這都是不同的函數(shù)導(dǎo)致充甚,這個無所謂
df.apply(lambda x:x.head(1))
index | a | b | c |
---|---|---|---|
1 | 1 | 2 | 3 |
如果axis=1呢?
df.apply(np.sum,axis=1)# 變成一個series
index | value |
---|---|
0 | 6 |
1 | 15 |
所以總結(jié)下霸褒,當(dāng)axis=0伴找, 傳進(jìn)去函數(shù)的是列向量,但其實還是進(jìn)行行運(yùn)算废菱,當(dāng)axis=1技矮, 傳進(jìn)去函數(shù)的是行向量,但其實還是進(jìn)行列運(yùn)算殊轴。
如果你是一個比較深入用pandas 的用戶衰倦,你會發(fā)現(xiàn)
dropna axis=0 刪除空值所在行
axis =1 刪除空值所在列
drop axis=0 刪除所在行
axis =1 刪除所在列
其實在這里,也不矛盾旁理,axis=0樊零,默認(rèn)的都是進(jìn)行 行運(yùn)算。
Series
不涉及axis 的問題孽文,非常簡單驻襟。