矢量化与异常值剔除

2024-05-02 20:10:39 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧中的每一列(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]

Tags: 数据代码in示例目标dfforif
1条回答
网友
1楼 · 发布于 2024-05-02 20:10:39

您可以根据所需的条件(在本例中是平均值的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)

相关问题 更多 >