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

作者: yshihyu (yshihyu)   2020-09-05 06:42:41
想刪除pandas 中的所有 nan 列欄位,
使用用 data.dropna(axis=1,how='all') 還是無法刪除掉
請問這是什麼原因?
程式碼網址如下
https://pastebin.com/v1qmebKz
謝謝
作者: gmccntzx1 (o.O)   2020-09-05 07:12:00
你可以先去查一下 how='all' or 'any' 的差別再補一點:注意有沒有設定 inplace=True
作者: yshihyu (yshihyu)   2020-09-05 07:27:00
any是行列全部只要有包含nan 都移除, inplace=True剛試還是無法刪除掉nan 欄位
作者: gmccntzx1 (o.O)   2020-09-05 08:39:00
你可以描述一下你最後想要得到的結果長什麼樣子嗎?是只要一行資料中有一欄資料是 NA 就把那行資料 drop 掉,還是怎麼樣的?如果是的話,照理說我上面的做法就可以了。如果不是,那你至少簡單的描述一下你預期處理前與處理後想看到的資料長什麼樣子給大家看看,省得雙方還要等待回覆和猜測你的想法是什麼
作者: yshihyu (yshihyu)   2020-09-05 08:40:00
我是想把欄位中有 NAN 那列刪除掉result = data.dropna() ... 我剛剛改這樣就可以但我不知道為什麼原因~這資料原本有949筆...有一列中有 NAN , 我希望刪除NAN那列..
作者: gmccntzx1 (o.O)   2020-09-05 08:48:00
因為你說的「刪掉 nan 欄位」這句話的意思,我理解的是「把該行裡是 nan 的那個欄位刪掉,只保留其他有資料的欄位」。如果是這樣的話,這種操作對於這種 table形式的資料是不合理的,因為這就代表處理完後,各行資料的欄位數量會不同。因為 dropna 預設回傳一個新的 dataframe,避免直接修改原始資料。所以如果你不是把 inplace 設為 true 的話,你就要去接 dropna 回傳的資料。而如果你設 inplace=True,那寫法就變成 df.dropna(inplace=True) 即可,跑完這行後,df 就是你要的結果。
作者: TitanEric (泰坦)   2020-09-05 08:53:00
你要刪row有包含Nan應該是axis=0,how='any' 剛試有成功記得接return值啊 感謝前面幫忙
作者: gmccntzx1 (o.O)   2020-09-05 08:57:00
沒事,只是覺得不要讓原 PO 解完問題卻不知道原因是什麼
作者: gulaer (Yu)   2020-09-09 07:46:00
how的話是全部都nan才會刪除喔!不放才是default有一格是nan就刪掉整列

Links booklink

Contact Us: admin [ a t ] ucptt.com