gpt4 book ai didi

python - 从 Pandas Dataframe(循环数据)中删除异常值

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:08 27 4
gpt4 key购买 nike

我想使用一些用户定义的函数从 Pandas 数据框中删除异常值。我在 Stackoverflow 中提出的同一问题有一些答案,但区别在于我拥有的数据集是循环数据。因此,使用 Pandas 内置函数 mean()std() 是不合适的。例如,在3555的循环数据值中只有10的差异,但线性差异给出350

我有数千个如下所示的数据框。我们清楚地看到 Geophone 6 是一个异常值。

  Geophone     azimuth  incidence      
0 1 194.765326 29.703151
1 2 193.143982 23.380681
2 3 199.327911 34.752212
3 4 195.641010 49.186893
4 5 193.479015 21.192982
5 6 0.745142 3.410046
6 7 192.380435 29.778807
7 8 196.700814 19.750237

在极坐标图中绘制数据时也可以确认这一点。

enter image description here

我编写了两个函数mean_anglevariance_angle,它们计算要应用于数据的循环均值和方差。方差给出一个介于 0 和 1 之间的值。当数据彼此接近时,方差值会接近 0,反之亦然。

import numpy as np
def mean_angle(deg):


deg = np.deg2rad(deg)

S = np.array(deg)
C = np.array(deg)
S = S[np.isfinite(S)] #remove np.nan
C = C[np.isfinite(C)]

S = np.sum(np.sin(S))
C = np.sum(np.cos(C))

mu = np.arctan(S/C)
mu = np.rad2deg(mu)

if S>0 and C>0:
mu = mu
elif S>0 and C<0:
mu = mu +180

elif S<0 and C<0:
mu = mu+180

elif S<0 and C>0:
mu = mu +360
return mu


def variance_angle(deg):
"""
deg: angles in degrees
"""
deg = np.deg2rad(deg)

S = np.array(deg)
C = np.array(deg)
S = S[np.isfinite(S)] #remove np.nan
C = C[np.isfinite(C)]

length = C.size

S = np.sum(np.sin(S))
C = np.sum(np.cos(C))
R = np.sqrt(S**2 + C**2)
R_avg = R/length
V = 1- R_avg

return V

mean_azimuth = mean_angle(df.azimuth)
variance = variance_angle(df.azimuth)


print(mean_azimuth)
197.4122778774279
print(variance)
0.24614383460498535

但是,当从计算中排除第 5 行时,均值和方差分别变为 195.06226604362286 和 0.0007544067627361928。方差从 0.25 更改为几乎 0

因此,我想找到一种方法来删除任何圆形异常值(方位角),从而使用上面所示的定义函数使圆形方差变高。

在此示例中,发生率也是同一检波器的异常值,但它实际上与方位角没有任何关系。还有其他数据,发生率在范围内,但方位角是异常值。

非常感谢任何帮助。

最佳答案

进行异常值检测的一种方法是计算数据的平均值和标准差,然后删除位于平均值 A*std 之外的点(您可以将 A 调整为对数据而言合理的值。)

因此,您可以使用函数来计算数据帧的平均值和方差,然后再次传递数据帧以删除平均值 A*std 之外的数据点。

关于python - 从 Pandas Dataframe(循环数据)中删除异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com