4
我對使用不同標準偏差標準的兩次通過的熊貓系列對象進行異常檢查。但是,我使用了兩個循環,運行速度非常慢。我想知道是否有任何熊貓「竅門」來加速這一步。在熊貓系列上加快異常值檢查
這裏是我使用的代碼(警告真正醜陋的代碼!):
def find_outlier(point, window, n):
return np.abs(point - nanmean(window)) >= n * nanstd(window)
def despike(self, std1=2, std2=20, block=100, keep=0):
res = self.values.copy()
# First run with std1:
for k, point in enumerate(res):
if k <= block:
window = res[k:k + block]
elif k >= len(res) - block:
window = res[k - block:k]
else:
window = res[k - block:k + block]
window = window[~np.isnan(window)]
if np.abs(point - window.mean()) >= std1 * window.std():
res[k] = np.NaN
# Second run with std2:
for k, point in enumerate(res):
if k <= block:
window = res[k:k + block]
elif k >= len(res) - block:
window = res[k - block:k]
else:
window = res[k - block:k + block]
window = window[~np.isnan(window)]
if np.abs(point - window.mean()) >= std2 * window.std():
res[k] = np.NaN
return Series(res, index=self.index, name=self.name)
嗨Zelazny7。因爲我需要將每個點與距離它僅100點而不是整個系列進行比較。這就是爲什麼我需要循環。 – ocefpaf 2013-02-25 20:13:20
謝謝,那正是我需要的。 – ocefpaf 2013-02-26 15:16:48
請注意,此解決方案假定數據是以零爲中心的。稍微更準確的答案:abs(s - s.mean())> pd.rolling_std(s,window = 5)* 3 – MarkAWard 2014-07-15 16:52:35