使用pandas根据不同的条件替换多列的异常值?

时间:2018-03-28 08:37:19

标签: pandas

我想一次在多列中找到异常值,并根据两个条件将异常值替换为其他值。 样本数据集:

day phone_calls received
1   11  11
2   12  12
3   10  0
4   13  12
5   170 2
6   9   9
7   67  1
8   180 150
9   8   1
10  10  10

找出异常值范围,让我们说范围是(8-50),然后替换值:如果列值小于8则替换为8,如果大于50则替换为50。 请帮助我是熊猫的新手。

1 个答案:

答案 0 :(得分:1)

我认为set_index需要clip

df = df.set_index('day').clip(8,50)
print (df)
     phone_calls  received
day                       
1             11        11
2             12        12
3             10         8
4             13        12
5             50         8
6              9         9
7             50         8
8             50        50
9              8         8
10            10        10

或类似于iloc而不先选择所有列:

df.iloc[:, 1:] = df.iloc[:, 1:].clip(8,50)
print (df)
   day  phone_calls  received
0    1           11        11
1    2           12        12
2    3           10         8
3    4           13        12
4    5           50         8
5    6            9         9
6    7           50         8
7    8           50        50
8    9            8         8
9   10           10        10

编辑:您可以在list中指定列:

cols = ['phone_calls','received']
df[cols] = df[cols].clip(8,50)
print (df)
   day  phone_calls  received
0    1           11        11
1    2           12        12
2    3           10         8
3    4           13        12
4    5           50         8
5    6            9         9
6    7           50         8
7    8           50        50
8    9            8         8
9   10           10        10