循环遍历数据框以消除数据中的巨大跳跃的最快方法
Posted
技术标签:
【中文标题】循环遍历数据框以消除数据中的巨大跳跃的最快方法【英文标题】:Quickest way to cycle through dataframe to remove a huge jump in data 【发布时间】:2016-11-23 20:20:30 【问题描述】:我有一组非常烦人的测量值,与正常模式相比,它经常只是 blibs 并且具有非常高的值,然后是非常低的值。
我正在尝试摆脱这些,并想知道是否有办法有效地删除前一点以及是否大于(为了任意 20)删除这两个点:
这是我目前所拥有的,但我有一个庞大的数据集,所以希望避免 for 循环
for i in range(1,len(df1)):
if abs(df1[TYPE].loc[i]-df1[TYPE].loc[i-1])>20:
#update new columns
df1[TYPE].loc[i-1] = -9999;
df1[TYPE].loc[i] =-9999;
其中 TYPE 是我的列变量的名称 这个方法还说:
TypeError: cannot do index indexing on <class `'pandas.tseries.index.DatetimeIndex'> with these indexers [1] of <class 'int'>`
我还认为在这些留置权上的某些东西是一种选择 - 但我不确定如何调整它,因此它不会一次性完成整个数据帧,而是比较每个位置
df1.insert(0,"newcol1","-9999")
df1['newcol1'] = df1[TYPE].shift() == df1[TYPE]
df1.ix[0, 'newcol1'] = True
if df1[['newcol1']] > 50:
print("Jhrjhfh!")
df1[TYPE]=-9999
df1[TYPE].shift=-9999
【问题讨论】:
大概您可以计算方差或标准差并删除异常值的行? 不,我不能使用标准差,原因是这样。数据中有一些峰值是气象学的伪影(又名高风速会影响数据,但那是科学),然后在这种情况下它就是仪器。因此,为什么我要让它看下一点 行为是否一致?你说非常高后非常低?您可以使用diff
来检测这一点,看看是否有可靠的模式可用于删除错误行
因此,使用标准差将剔除所有高于阈值的点,包括由您从一个月/年到另一个月/年获得的自然差异引起的任何逐渐变化
不,遗憾的是根本不一致。
【参考方案1】:
您可以将此方法应用于要过滤的每一列。这将过滤掉 1 帧中出现的光点。
max_delta = 50
delta = df1['colname'].diff().shift(-1).abs()
delta.iloc[-1] = delta.iloc[-2]
df1 = df1[(delta < max_delta)]
【讨论】:
以上是关于循环遍历数据框以消除数据中的巨大跳跃的最快方法的主要内容,如果未能解决你的问题,请参考以下文章
Python 3 函数循环遍历 pandas 数据框以更改模式