2017-05-29 14 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