对熊猫进行离群值矢量化处理

时间:2018-07-04 12:56:44

标签: python pandas

数据帧中的每个列(c)都包含一个时间序列值,这些值包含一些极端离群值,其目的是删除这些值并将它们替换为以前看到的值。

以下代码可以很好地实现此目的,但是它非常慢,因为我需要针对总共7个不同的列和59个数据帧运行此操作。反正有矢量化此操作或以另一种方式使其更快的方法?

用除先前看到的值以外的任何值代替异常值并不是真正的选择,因为这会干扰数据的时间序列性质。

for c in df.columns:
    if c == "date":
        continue
    for i in range(len(dfn)):
        if dfn[c].iloc[i] > 5*np.mean(dfn[c]):
            dfn[c].iloc[i] = dfn[c].iloc[i-1]
    end_df = end_df.append(dfn)

离群值去除替换的示例输入:

[10, 28, 39, 48193, 14]

离群值去除替换的示例输出:

[10, 28, 39, 39, 14]

1 个答案:

答案 0 :(得分:3)

您可以根据所需条件(在这种情况下,是平均值的5倍)对数据框进行过滤,并替换为nan。然后,您可以使用内置的pandas函数fillna替换为以前看到的值。

您的代码将是

import numpy as np

for c in df.columns:
    if c == "date":
        continue
    df.loc[df[c] > 5 * df[c].mean(), c] = np.nan
    df[c].fillna(method='ffill', inplace=True)