關於axis參數的觀念
先前在讀程式碼時,一直認為紅色處應為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進行動作呢?答對了!你好聰明呀!哈哈