Re: [問題] pandas修正數據問題

看板Python作者 (布阿送)時間5年前 (2018/09/02 08:55), 編輯推噓1(101)
留言2則, 1人參與, 5年前最新討論串2/2 (看更多)
我還是直接回文好了。 ※ 引述《bigbigcc (大大)》之銘言: : 最近在學python 現在想利用pandas進行數據清理異常值 : 想說讓兩個row之間的值不要差距太大如果差太多就跟前一個相同 : df內為 : a b : 0 1 1 : 1 2 2 : 2 3 4 : 3 4 9 : 4 5 8 : 5 6 5 : 6 7 7 : 7 8 8 : 8 9 9 : 9 10 10 : 主要的程式碼如下 : data = df['b'] : def new(data): : for i in range(0, 10): : row = df['b'][i] : row1 = df['b'][i + 1] : if row1 - row > 2: : return row : else: : return row1 除了map的用法之外,這個函數有個問題 就是你在i=0的時候就已經return了,而且根本沒有用到data, 而你在函數裡面直接用df['b'] 就算是i=0 new會回傳的是row1 就是df['b'][1] 等於2 也就是為什麼你的new 那一欄全部都是2,因為每次叫new函數都回傳2 再者,這個函數在i=9會出錯,因為df['b'][10]超出範圍了 : df['new'] = df['b'].map(new) : 實際輸出結果為 : a b new 本來認為會有的結果 : 0 1 1 2 1 : 1 2 2 2 2 : 2 3 4 2 4 : 3 4 9 2 4 : 4 5 8 2 4 : 5 6 5 2 5 : 6 7 7 2 7 : 7 8 8 2 8 : 8 9 9 2 9 : 9 10 10 2 10 : 想請問各位版友是我邏輯上還是函式使用上有哪邊誤解了嗎? 疑問: 你b[3],b[4]變小是那邊是刻意的嗎? "想說讓兩個row之間的值不要差距太大如果差太多就跟前一個相同" 那8-9沒有符合你的row1-row >2的條件,為什麼要改成4? 我覺得比較清楚的方法是,用df['b'].diff找出每個跟前一個的差別 設定好條件,然後再去建立新的Series/Column 或是你可以用for loop去搞(跟你本來定義的函數類似) 可是range跟條件必須改 希望有幫上忙 版上前輩有沒有更好的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.225.61.130 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1535849743.A.E70.html

09/03 00:16, 5年前 , 1F
因為我本來是想說b[3]檢查過後就讓他變為4 然後b[4]在跟
09/03 00:16, 1F

09/03 00:17, 5年前 , 2F
b[3]比所以也變成4
09/03 00:17, 2F
文章代碼(AID): #1RYpKFvm (Python)
文章代碼(AID): #1RYpKFvm (Python)