新增欄位出現SettingWithCopyWarning 錯誤
各位老師好,
我在嘗試擷取Income 作為一個subset然後新增一個欄位,其單位為千元。並利用pd.cut將數據分成數份。
我相信此做法會跟D16的範例雷同。但卻出現了 SettingWithCopyWarning。
D16範例如下:
我的D18練習如下:
回答列表
- 
            2019/09/16 上午 00:24Wei-po Tsai贊同數:1不贊同數:0留言數:1Hi!同學你好: ============================================ 我是偽菠菜(Wei-Po Tsai),是個剛學Python的新手, 對你提到的問題很有興趣,所以研究了一下,請多指教。 ============================================ 在這邊會出現Warning,主要原因是系統建議你使用 .loc 來進行這部份的操作。 以下的In[5]是改用.loc之前; 以下的In[6]是改用.loc之後 至於詳細的原因,系統建議的文件中有說明,所以在這邊我就不獻醜啦! https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-view-versus-copy 文件中說明的部分,擷錄如下圖: Edited By:偽菠菜(Wei-Po Tsai) 
- 
            2019/09/16 下午 01:58計弘達贊同數:2不贊同數:0留言數:2回答「D18的程式跟D16邏輯基本一樣,D16的卻沒有出現這個提示。不曉得是什麼原因造成這個差異。」 原因是在 D016 的第一段程式中有過濾 warning message 的兩行指令: # 忽略警告訊息 import warnings warnings.filterwarnings('ignore') 
- 
            2019/09/16 下午 09:49張維元 (WeiYuan)贊同數:2不贊同數:0留言數:1樓上兩位同學的解釋都很好:) 關於這個「SettingWithCopyWarning」我稍微補充下,這個問題其實是來自於「chained indexing」。複雜的 DF 存取,會產生不可預期的狀況產生(有時候是 Copy 有時候是 View),因此官方建議採用 loc 的方法存取資料。可以看這個:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-view-versus-copy 
