我有以下python代码:
consumos=df.iloc[:,0]
df['media_movel'] = rolling_median(consumos, window=30, center=True).fillna(method='bfill').fillna(method='ffill')
desv_padrao=df.stack().std()
threshold = 1000
difference = np.abs(consumos - df['media_movel'])
corr=np.abs(df['media_movel']-desv_padrao)
df['corr']=pd.DataFrame(corr)
outlier = difference > threshold
df.mask(outlier, df['corr'], axis=1)
所以,我有一个包含时间序列的数据框,我的目标是纠正异常值(通过承认参考数据和滚动中位数之间的差异必须大于1000,这是阈值)。
为此,我创建了布尔变量outlier
(当基于前面的解释存在异常值时为True)并且我试图用以下内容替换这些异常值:(滚动mediam列 - 标准差)进入掩码,但结果是NaNs的时间序列。我不知道为什么会出现那些NaN,但我需要获得正确的数据。
答案 0 :(得分:0)
我认为由于形状不匹配,掩膜值的替换可能会失败。尝试用以下内容替换最后一行:
df.mask(outlier, df['corr'].values.reshape(-1, 1), axis=1)
如果失败,请尝试:
df.iloc[:,0].mask(outlier, df['corr'].values.reshape(-1, 1), axis=1)