Pandas用卷毛填充增加了噪音

2024-05-12 13:41:31 发布

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

我试图从数据帧中的列中删除异常值

下面是我的变量最初的样子(带有明显的异常值):

enter image description here

然后我决定删除任何变化为+/-3的内容(因为我知道不可能变化那么大):

这很有效,让我可以更换钉子:

enter image description here

但是,每当我试图用以前的观察值替换现在缺失的值时,我不知何故又得到了一些峰值

enter image description here

有人知道我做错了什么吗

以下是整个代码(在一个无限期运行的while循环中):

df = pd.DataFrame({'soc': [38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 127.0, 127.0, 66.48, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 127.0, 55.8, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0]})
while (abs(df['soc'].diff()) > 3).any():
    df['soc'] = np.where(abs(df['soc'].diff()) > 3, np.nan, df['soc'])
    df['soc'].fillna(method='ffill', inplace=True)

Tags: 数据代码内容dfnpdiffabspd
1条回答
网友
1楼 · 发布于 2024-05-12 13:41:31

我相信你没有删除偏差超过3的值,因为在第二个图中,我仍然可以看到一个不应该出现的点。也许您也在错误的列中赋值。这是一个通用的例子,说明您打算做的事情是有效的:

df = pd.DataFrame({'A':[100,110,105,104,103,102,101]})
df['A'] = np.where(abs(df['A'].diff()) > 3,np.nan,df['A'])
df['A'] = df['A'].fillna(method='ffill')

在本例中,应移除110和105,因为它们之间的偏差超过3,并且它们将替换为100。输出:

       A
0  100.0
1  100.0
2  100.0
3  104.0
4  103.0
5  102.0
6  101.0

相关问题 更多 >