替换pandas DataFrame中的值

时间:2017-05-29 23:07:42

标签: python pandas dataframe

我有以下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,但我需要获得正确的数据。

1 个答案:

答案 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)