在pandas数据框子集中(这里是我的异常值)应该删除:
示例:
df = data[~(data.outlier1 == 1)]
但是我的数据框有多个异常值行。
是否有类似的东西:
df = data[~((data.outlier1 == 1) or (data.outlier2 == 1) or (data.outlier3 == 1))]
我们的想法是同时减去所有异常值(编码在不同的行中)。
答案 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()
# 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()