dataframe中的每一列(c)都包含一个包含一些极端异常值的时间序列值,其目标是删除这些值并替换以前看到的值。
下面的代码可以正常工作,但是非常慢,因为我总共需要对7个不同的列和59个数据文件运行这个操作。是否存在将此操作矢量化或以另一种方式使其更快的操作?
用以前看到的值代替异常值并不是一个真正的选择,因为这会干扰数据的时间序列性质。
for c in df.columns:
if c == "date":
continue
for i in range(len(dfn)):
if dfn[c].iloc[i] > 5*np.mean(dfn[c]):
dfn[c].iloc[i] = dfn[c].iloc[i-1]
end_df = end_df.append(dfn)
孤立点删除替换的示例输入:
[10, 28, 39, 48193, 14]
异常值删除替换的示例输出:
[10, 28, 39, 39, 14]
发布于 2018-07-04 05:06:26
您可以根据您希望的条件(在本例中为平均值的5倍)筛选数据,并使用nan
替换。然后,您可以使用内置的pandas
函数fillna
来替换前面看到的值。
然后,您的代码将是
import numpy as np
for c in df.columns:
if c == "date":
continue
df.loc[df[c] > 5 * df[c].mean(), c] = np.nan
df[c].fillna(method='ffill', inplace=True)
https://stackoverflow.com/questions/51174254
复制