1. 程式人生 > >pandas 中的Axis(軸)的理解

pandas 中的Axis(軸)的理解

python中的axis究竟是如何定義的呢?他們究竟代表是DataFrame的行還是列?考慮以下程式碼:

>>>df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>>df
   col1  col2  col3  col4
    0     1     1     1     1
    1     2     2     2     2
    2     3     3     3     3
-----------------------------------------------------------------------------------------------------------------------------------

呼叫df.mean(axis=1),我們將得到按行計算的均值

>>> df.mean(axis=1)
0    1
1    2
2    3

-----------------------------------------------------------------------------------------------------------------------------------

然而,如果我們呼叫 df.drop((name, axis=1),我們實際上刪掉了一列,而不是一行:

>>> df.drop("col4", axis=1)
    col1  col2  col3
0     1     1     1
1     2     2     2
2     3     3     3
-----------------------------------------------------------------------------------------------------------------------------------

注意,這裡drop()函式需要指定維度,如果不指定的話,會報錯,如下所示:

那麼如何理解在pandas、numpy、scipy中axis引數的真實含義呢

根據stackoverflow答主解釋,axis=0指的是逐行,axis=1指的是逐列。

其實問題理解axis有問題,df.mean其實是在每一行上取所有列的均值,而不是保留每一列的均值。也許簡單的來記就是axis=0代表往跨行(down),而axis=1代表跨列(across),作為方法動作的副詞(譯者注)。

換句話說:

  • 使用0值表示沿著每一列或行標籤\索引值向下執行方法
  • 使用1值表示沿著每一行或者列標籤模向執行對應的方法

下圖代表在DataFrame當中axis為0和1時分別代表的含義:

這裡是理解的關鍵

根據結果: 
mean(axis=0)計算的是每一列平均值, 
mean(axis=1)計算的是每一行平均值。 
drop(0,axis=0)刪除行, 
drop([‘col1’],axis=1)刪除列。