2015-10-06 106 views
1

在大熊貓數據框的子集(這裏是我的異常值)應刪除:刪除已知從大熊貓異常數據框中

例如:

df = data[~(data.outlier1 == 1)] 

但我的數據框中有多個離羣行。

有什麼樣:

df = data[~((data.outlier1 == 1) or (data.outlier2 == 1) or (data.outlier3 == 1))] 

的想法是可以減去所有的異常值(在不同行編碼)在同一時間。

+1

對不起你data [〜((data.outlier1 == 1)|(data.outlier2 == 1)|(data.outlier3 == 1))]'? – EdChum

+0

是的。謝謝。我知道這可能是基本的知識,但我並不是那種經歷過蟒蛇或大熊貓的經歷。另外,我認爲有全面答案的簡短問題對其他沒有經驗的用戶很有用。 – Annamarie

回答

2

IIUC那麼你只需要使用按位或操作|,測試多個條件:

df = data[~((data.outlier1 == 1) | (data.outlier2 == 1) | (data.outlier3 == 1))] 

的原因是因爲你是一個標量比較陣列,所以你應該使用按位|運營商,而不是or

0

另一種方法是通過winsorizing截斷異常值。在下面的例子中,每列將被覆蓋,並在第5和第95百分位數地板,而不會失去任何行:後`DF =

import pandas as pd 
from scipy.stats import mstats 
%matplotlib inline 

test_data = pd.Series(range(30)) 
test_data.plot() 

Original data

# Truncate values to the 5th and 95th percentiles 
transformed_test_data = pd.Series(mstats.winsorize(test_data, limits=[0.05, 0.05])) 
transformed_test_data.plot() 

Winsorized data