2
我有一個創建使用熊貓從熊貓數據框中蟒蛇刪除離羣
import pandas as pd
import numpy as np
x = (g[0].time[:111673])
y = (g[0].data.f[:111673])
df = pd.DataFrame({'Time': x, 'Data': y})
#df
這打印出一個數據幀代碼:
Data Time
0 -0.704239 7.304021
1 -0.704239 7.352021
2 -0.704239 7.400021
3 -0.704239 7.448021
4 -0.825279 7.496021
這是偉大的,但我知道在這個數據的異常值是我想刪除,所以我創建了以下數據框以指出它們:
newdf = df.copy()
Data = newdf.groupby('Data')
newdf[np.abs(newdf.Data-newdf.Data.mean())<=(3*newdf.Data.std())]
newdf['Outlier'] = Data.transform(lambda x: abs(x-x.mean()) > 1.96*x.std())
#newdf
這打印ou T:
Data Time Outlier
0 -0.704239 7.304021 False
1 -0.704239 7.352021 False
2 -0.704239 7.400021 False
3 -0.704239 7.448021 False
4 -0.825279 7.496021 False
在我的數據你不能看到它,但也有可能異常值300,我想不會對原有的數據幀搞亂刪除它們,然後一起繪製它們作爲壓縮的例子。 我的問題是這樣的:所以,而不是打印出錯誤/真實我怎麼才能消除真正的異常呢?所以我最終可以將它們繪製在同一個圖表中進行比較。
代碼我已經嘗試:
newdf[np.abs(newdf.Data-newdf.Data.mean())<=(1.96*newdf.Data.std())]
newdf = df.copy()
def replace_outliers_with_nan(df, stdvs):
newdf=pd.DataFrame()
for i, col in enumerate(df.sites.unique()):
df = pd.DataFrame(df[df.sites==col])
idx = [np.abs(df-df.mean())<=(stdvs*df.std())]
df[idx==False]=np.nan
newdf[col] = df
return newdf
這兩個不工作,他們返回的數據點的相同數量的我原來的數據幀,但是我知道,如果它去掉異常值點的量會比原來的要少。
當我想你的答案,我得到一個數值錯誤:'提高ValueError異常(MSG .format(dtype = dt)) ValueError:條件的預期布爾數組,不是float64' –
什麼返回'print(df.groupby('Data')。transform(lambda x:abs(xx.mean())> 1.96 * x.std()))'?不是「真假系列」? – jezrael
我發現問題,你需要'.values'將系列轉換爲numpy數組。 – jezrael