我有一个数据集,比方说,420x1。现在我要计算过去 30 天的移动平均值,不包括当前日期。
如果我执行以下操作:
df.rolling(window = 30).mean().shift(1)
Run Code Online (Sandbox Code Playgroud)
我的 df 导致窗口中有很多 NaN,这可能是由原始数据帧中的 NaN 引起的(30 个数据点中的 1 NaN 导致 MA 为 NaN)。
有没有忽略 NaN 的方法(避免应用方法,我在大数据上运行它所以性能是关键)?我不想用 0 替换该值,因为这可能会扭曲结果。
这同样适用于移动标准差。
我正在使用 pykalman 模块中的 KalmanFilter 并想知道它如何处理丢失的观察结果。根据文档:
在现实世界的系统中,传感器偶尔出现故障是很常见的。卡尔曼滤波器、卡尔曼平滑器和 EM 算法都可以处理这种情况。要使用它,只需在缺失的时间步长处对测量应用 NumPy 掩码:
from numpy import ma X = ma.array([1,2,3]) X 1 = ma.masked # 在时间步长 1 隐藏测量 kf.em(X).smooth(X)
我们可以平滑输入时间序列。由于这是一个“附加”功能,我认为它不是自动完成的;那么在变量中有 NaN 时的默认方法是什么?
这里解释了可能发生的理论方法;这也是pykalman所做的吗(在我看来这真的很棒):
我想将一张桌子附加到另一张桌子上。两个表可能具有不同的列。结果应该是一个包含所有列的表,并且在其中值不存在的地方,应该是缺少的观察值。数据是时间序列的-由于时间跨度的限制,我从不同的来源获取数据-因此我需要将它们彼此“堆叠”,但可能是添加或删除了一个或另一列。
由于行中有一点重叠,因此我正在寻找一种解决方案,该方案将采用第一个表的数据。然后的问题是,对于表1中不存在的那些列,当我在表2中选择表1时,它们也不存在。
当前的解决方案是截止表2,因此没有重叠。
表格1:
date AA BB CC DD
20100101 9 10 11 12
20100102 10 11 12 13
Run Code Online (Sandbox Code Playgroud)
表2:
date AA BB CC EE FF
20100102 99 99 10
20100103 11 12 13 14 10
20100104 12 13 14 15 11
Run Code Online (Sandbox Code Playgroud)
结果应该是
date AA BB CC DD EE FF
20100101 9 10 11 12
20100102 10 11 12 13 99 10
20100103 11 12 13 14 10
20100104 12 13 14 15 11
Run Code Online (Sandbox Code Playgroud)
因此,我实际上没有按此处建议的方法“加入”:两个具有不同列的表的SQL联合
missing-data ×2
append ×1
dataframe ×1
numpy ×1
pandas ×1
postgresql ×1
pykalman ×1
smoothing ×1
sql ×1
time-series ×1