【发布时间】:2019-10-07 16:20:59
【问题描述】:
我有一个非常大的数据集,它来自拍打两个激光频率并读出带有频率的拍频。柜台。
问题是我的数据集中有很多异常值。
过滤不是一种选择,因为过滤/去除异常值会杀死我用来分析我的拍频的艾伦偏差的宝贵信息。
去除异常值的问题是我想比较三个不同拍频的艾伦偏差。如果我现在删除一些点,我的 x 轴将比以前更短,并且我的艾伦偏差 x 轴将缩放不同。 (adev 基本上建立了一个新的 x 轴,从我的采样率到最长测量时间的间隔开始 -> 这是我的最高拍频 x 轴值。)
对不起,如果这令人困惑,我想提供尽可能多的信息。
无论如何,到目前为止,我所做的是让我的整个艾伦偏差正常工作并成功删除异常值,将我的列表分成区间并将每个区间的所有 y 值与区间的标准差进行比较。
我现在想要改变的是,我不想删除异常值,而是用它们的前一个和下一个邻居的平均值替换它们。
您可以在下面找到我的异常值列表的测试代码,使用 numpy where 似乎有问题,我真的不明白为什么。
错误是“'numpy.int32'对象没有属性'where'”。我必须将我的数据集转换为熊猫结构吗?
代码所做的是搜索高于/低于我的阈值的值,用 NaN 替换它们,然后用我的平均值替换 NaN。我不太喜欢使用 NaN 替换,因此我将非常感谢您的帮助。
l = np.array([[0,4],[1,3],[2,25],[3,4],[4,28],[5,4],[6,3],[7,4],[8,4]])
print(*l)
sd = np.std(l[:,1])
print(sd)
for i in l[:,1]:
if l[i,1] > sd:
print(l[i,1])
l[i,1].where(l[i,1].replace(to_replace = l[i,1], value = np.nan),
other = (l[i,1].fillna(method='ffill')+l[i,1].fillna(method='bfill'))/2)
所以我想要的是将异常值替换为前一个/后一个邻居的方法的列表/数组
错误消息:“numpy.int32”对象没有属性“where”
【问题讨论】:
标签: python python-3.x numpy jupyter