[問題] pandas 使用dropna 無法刪除nan列

看板Python作者 (yshihyu)時間3年前 (2020/09/05 06:42), 3年前編輯推噓2(2031)
留言33則, 4人參與, 3年前最新討論串1/1
想刪除pandas 中的所有 nan 列欄位, 使用用 data.dropna(axis=1,how='all') 還是無法刪除掉 請問這是什麼原因? 程式碼網址如下 https://pastebin.com/v1qmebKz 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.104.29.202 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1599259364.A.E36.html ※ 編輯: yshihyu (112.104.29.202 臺灣), 09/05/2020 06:45:22

09/05 07:12, 3年前 , 1F
你可以先去查一下 how='all' or 'any' 的差別
09/05 07:12, 1F

09/05 07:17, 3年前 , 2F
再補一點:注意有沒有設定 inplace=True
09/05 07:17, 2F

09/05 07:27, 3年前 , 3F
any是行列全部只要有包含nan 都移除, inplace=True剛試
09/05 07:27, 3F

09/05 07:28, 3年前 , 4F
還是無法刪除掉nan 欄位
09/05 07:28, 4F

09/05 08:39, 3年前 , 5F
你可以描述一下你最後想要得到的結果長什麼樣子嗎?是
09/05 08:39, 5F

09/05 08:39, 3年前 , 6F
只要一行資料中有一欄資料是 NA 就把那行資料 drop 掉
09/05 08:39, 6F

09/05 08:39, 3年前 , 7F
,還是怎麼樣的?如果是的話,照理說我上面的做法就可
09/05 08:39, 7F

09/05 08:39, 3年前 , 8F
以了。如果不是,那你至少簡單的描述一下你預期處理前
09/05 08:39, 8F

09/05 08:39, 3年前 , 9F
與處理後想看到的資料長什麼樣子給大家看看,省得雙方
09/05 08:39, 9F

09/05 08:39, 3年前 , 10F
還要等待回覆和猜測你的想法是什麼
09/05 08:39, 10F

09/05 08:40, 3年前 , 11F
我是想把欄位中有 NAN 那列刪除掉
09/05 08:40, 11F

09/05 08:41, 3年前 , 12F
result = data.dropna() ... 我剛剛改這樣就可以
09/05 08:41, 12F

09/05 08:41, 3年前 , 13F
但我不知道為什麼原因~
09/05 08:41, 13F

09/05 08:41, 3年前 , 14F
這資料原本有949筆...有一列中有 NAN , 我希望刪除NAN那
09/05 08:41, 14F

09/05 08:42, 3年前 , 15F
列..
09/05 08:42, 15F

09/05 08:48, 3年前 , 16F
因為你說的「刪掉 nan 欄位」這句話的意思,我理解的
09/05 08:48, 16F

09/05 08:48, 3年前 , 17F
是「把該行裡是 nan 的那個欄位刪掉,只保留其他有資
09/05 08:48, 17F

09/05 08:48, 3年前 , 18F
料的欄位」。如果是這樣的話,這種操作對於這種 table
09/05 08:48, 18F

09/05 08:48, 3年前 , 19F
形式的資料是不合理的,因為這就代表處理完後,各行
09/05 08:48, 19F

09/05 08:48, 3年前 , 20F
資料的欄位數量會不同。
09/05 08:48, 20F

09/05 08:49, 3年前 , 21F
因為 dropna 預設回傳一個新的 dataframe,避免直接修
09/05 08:49, 21F

09/05 08:49, 3年前 , 22F
改原始資料。
09/05 08:49, 22F

09/05 08:50, 3年前 , 23F
所以如果你不是把 inplace 設為 true 的話,你就要去
09/05 08:50, 23F

09/05 08:50, 3年前 , 24F
接 dropna 回傳的資料。
09/05 08:50, 24F

09/05 08:52, 3年前 , 25F
而如果你設 inplace=True,那寫法就變成 df.dropna(in
09/05 08:52, 25F

09/05 08:52, 3年前 , 26F
place=True) 即可,跑完這行後,df 就是你要的結果。
09/05 08:52, 26F

09/05 08:53, 3年前 , 27F
你要刪row有包含Nan應該是axis=0,how='any' 剛試有成功
09/05 08:53, 27F

09/05 08:53, 3年前 , 28F
記得接return值
09/05 08:53, 28F

09/05 08:54, 3年前 , 29F
啊 感謝前面幫忙
09/05 08:54, 29F

09/05 08:57, 3年前 , 30F
沒事,只是覺得不要讓原 PO 解完問題卻不知道原因是什
09/05 08:57, 30F

09/05 08:57, 3年前 , 31F
09/05 08:57, 31F

09/09 07:46, 3年前 , 32F
how的話是全部都nan才會刪除喔!不放才是default有一格是n
09/09 07:46, 32F

09/09 07:46, 3年前 , 33F
an就刪掉整列
09/09 07:46, 33F
文章代碼(AID): #1VKiBaus (Python)