【发布时间】:2018-03-16 12:19:18
【问题描述】:
我有一个包含 3 列的数据框,例如
c1,c2,c3
10000,1,2
1,3,4
2,5,6
3,1,122
4,3,4
5,5,6
6,155,6
我想替换 2 sigma 之外的所有列中的异常值。使用下面的代码,我可以创建一个没有异常值的数据框。
df[df.apply(lambda x: np.abs(x - x.mean()) / x.std() < 2).all(axis=1)]
c1,c2,c3
1,3,4
2,5,6
4,3,4
5,5,6
我可以分别找到每列的异常值并替换为“nan”,但这不是最好的方法,因为代码中的行数会随着列数的增加而增加。必须有更好的方法来做到这一点。可能是上述行命令的布尔输出,然后将“TRUE”替换为“nan”。
任何建议,非常感谢。
【问题讨论】:
-
你能准确解释你的问题是什么吗?顺便说一句,您可以摆脱申请 -
df[df.sub(df.mean()).abs().div(df.std()).lt(2).all(1)] -
我想用“nan”替换数据框中的所有异常值(2 sigma 范围之外)。如果没有应用功能,则必须分别对每一列进行此操作。