从pandas数据帧中删除已知的异常值

时间:2015-10-06 15:27:48

标签: python pandas

在pandas数据框子集中(这里是我的异常值)应该删除:

示例:

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

但是我的数据框有多个异常值行。

是否有类似的东西:

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

我们的想法是同时减去所有异常值(编码在不同的行中)。

2 个答案:

答案 0 :(得分:2)

IIUC然后您只需要使用按位或运算符|来测试多个条件:

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

原因是您要使用标量比较数组,因此应使用按位|运算符而不是or

答案 1 :(得分:0)

另一种方法是通过winsorizing截断异常值。在下面的示例中,每个列都将被限制并在第5和第95百分位处覆盖,而不会丢失任何行:

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