从一个

时间:2017-01-09 23:06:20

标签: python pandas dataframe filtering percentile

假设我有一个包含功能和标签的数据框:

f1    f2   label
-1000 -100 1
-5    3    2
0     4    3
1     5    1
3     6    1
1000  100  2

我想从列f1和f2过滤异常值以获取:

f1    f2   label
-5    3    2
0     4    3
1     5    1
3     6    1

我知道我可以这样做:

data = data[(data > data.quantile(.05)) & ( data < data.quantile(.95))]

但是&#39;标签&#39;列也将被过滤。如何避免过滤某些列?我不想手动过滤所有列,因为它们有数十个。 感谢。

1 个答案:

答案 0 :(得分:2)

以下方法如何:

In [306]: x = data.drop('label', 1)

In [307]: x.columns
Out[307]: Index(['f1', 'f2'], dtype='object')

In [308]: data[((x > x.quantile(.05)) & (x < x.quantile(.95))).all(1)]
Out[308]:
   f1  f2  label
1  -5   3      2
2   0   4      3
3   1   5      1
4   3   6      1