2017-05-29 260 views
-1

我有以下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) 

所以,我有一个包含时间序列数据帧和我的目的是纠正异常值(由admiting,基准数据之间的差滚动中位数必须大于1000,这是阈值)。为此,我创建了布尔变量outlier(根据前面的解释,当出现异常值时为True),我试图用(轧制介质列 - 标准偏差)替换那些异常值为一个掩模,但结果是NaN的时间序列。我不知道为什么这些NaN出现,但我需要获得正确的数据。

回答

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) 
+0

任何选项都没有工作。在第一种情况下,我得到:ValueError:其他形状必须与ndarray中的自身形状相同 get中的第二种情况:ValueError:替换长度必须等于系列长度。 – Jvr

+0

这两个表达式返回了什么:'df.shape'和'df ['corr']。shape'? – blueogive