logo
Loading...

關於axis參數的觀念 - Cupoy

先前在讀程式碼時,一直認為紅色處應為axis = 0 ,這邊付上截圖後來在stackoverflow...

ml100-4

關於axis參數的觀念

2020/03/03 上午 00:51
機器學習共學討論版
陳維仁
觀看數:14
回答數:3
收藏數:0
ml100-4

先前在讀程式碼時,一直認為紅色處應為axis = 0 ,這邊付上截圖

後來在stackoverflow上看到也有人有這方面的問題,仔細讀了一下,不確定自己的理解是否正確。(連結:https://stackoverflow.com/questions/25773245/ambiguity-in-pandas-dataframe-numpy-array-axis-definition)

以截圖為例:

想成紅筆是axis = 1的"運算"方向,藍筆是一輪運算方向結束後的"移動"方向,移動後再開始新的一輪"運算"方向,這樣想的話,第一個截圖(drop的部分)就沒問題了。

問題:

這裡解讀成df_train和df_test做完某一個column(如:編號1的col)的concat(即"運算方向"為縱向)後,移動方向為水平(即移動到編號2的col)做下一輪concat,是對的嗎?

如果不是,那該怎麼理解stackoverflow中提到的axis問題和concat的axis又要怎麼解讀?


非常謝謝您

回答列表

  • 2020/03/03 上午 02:38
    張維元 (WeiYuan)
    贊同數:4
    不贊同數:0
    留言數:1

    嗨,看這一張圖:


    Axis = 0 => 一行一行看,有幾行就會有幾個結果

    Axis = 1 => 一列一列看,有幾列就會有幾個結果


    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃

  • 2020/03/03 上午 11:54
    張維元 (WeiYuan)
    贊同數:2
    不贊同數:0
    留言數:0

    「請問一下,那drop某一個column為什麼不能用axis=0,想成一行一行看,總共1行,謝謝您的回覆!」


    => 喔喔喔,這邊可能要想成「以 Row 的方向做運算(index = 0 到 index = 3),哪些 index 要 drop」。


    如果是  df.drop([1], axis=0)  的意思就是:以 Row 的方向做運算,index = 1 的 Row 要刪除,一行一行刪,有幾行就會有幾個資料被刪。


    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的 GITHUB 帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃

  • 2020/03/03 下午 08:45
    李子明
    贊同數:2
    不贊同數:0
    留言數:2

    你要的是不是,找出一個方便理解的邏輯,用來幫助記憶?


    我的記憶方式:

    function name是動作,並且是針對最小獨立單位在進行的動作。axis是英文的per,0就是per column,1就是per row。


    當動作是drop的時候,如果axis是1,那麼就是刪除row中的每一個符合的元素,所以這裡會有row個drop,每個row會有一個drop的意思,這堆drop是同時執行的。


    當動作是mean或sum的時候,就不用看元素符不符合條件了,通通都是要併入進行,但如果有meanif或sumif的話,那大概可以猜到要怎樣進行。


    當動作是pandas的concat時,也是一樣,per column時,會先決定要有幾個concat,也就是最後的結果會有幾個column,這是因為合併的陣列的index不見得都是一樣的,比如下圖,就只有col2是共有的,所以column的最終數量是四,所以將會有四台cancat同時進行動作。你可以猜猜看圖中的例子如果把axis改設定為1,那會有幾台cancat進行動作呢?答對了!你好聰明呀!哈哈