长问题简短,什么是合适的重采样频率/规则? 有时我会得到一个主要填充 NaN 的数据帧,有时效果很好。 我以为我掌握了它。
下面是一个例子,
我正在处理大量数据并更改我的重采样频率,并注意到由于某些重采样规则在每行中仅产生 1 个元素具有值,其余元素具有 NaN。
例如
df = pd.DataFrame()
df['date']=pd.date_range(start='1/1/2018', end='5/08/2018')
创建一些示例数据,
df['data1']=np.random.randint(1, 10, df.shape[0])
df['data2']=np.random.randint(1, 10, df.shape[0])
df['data3'] = np.arange(len(df))
数据如下所示,
print(df.head())
print(df.shape)
data1 data2 data3
date
2018-01-01 7 7 0
2018-01-02 8 8 1
2018-01-03 2 7 2
2018-01-04 2 2 3
2018-01-05 2 5 4
(128, 3)
当我使用偏移别名对数据重新采样时,我得到了意想不到的结果。
下面我每 3 分钟重新采样一次数据。
resampled=df.resample('3T').mean()
print(resampled.head())
print(resampled.shape)
data1 data2 data3
date
2018-01-01 00:00:00 4.0 5.0 0.0
2018-01-01 00:03:00 NaN NaN NaN
2018-01-01 00:06:00 NaN NaN NaN
2018-01-01 00:09:00 NaN NaN NaN
2018-01-01 00:12:00 NaN NaN NaN
除了第一行之外,大多数行都填充了 NaN。 我相信这是因为我的重采样规则没有索引。 这是对的吗?"24H"是此数据的最小间隔,但任何小于此数据的间隔都会使NaN连续出现。
是否可以对数据帧进行小于日期时间分辨率的增量重新采样?
我过去在尝试对跨越一年的大型数据集进行重采样时遇到过麻烦,日期时间索引格式为 %Y:%j:%H:%M:%S(年:天 #:小时:分钟:秒,注意:足够接近而不冗长(。 尝试每15或30天重新采样也产生了与NaN非常相似的结果。我认为这是由于没有月份的奇数日期格式,但 df.head(( 显示了带有正确日期的索引。
当您重新采样降低频率(下采样(时,则 计算结果的可能选项之一是mean((。它实际上意味着:
- 源数据帧包含的数据过于详细。
- 您想将采样频率更改为较低的频率,并且 计算例如,从某个数字计算每列的平均值 当前采样周期的源行数。
但是,当您增加采样频率(上采样(时,则:
- 您的源数据过于笼统。 您希望将频率
- 更改为更高的频率。
- 计算结果的可能选项之一是例如 在已知源值之间进行插值。
请注意,当您将每日数据上采样为 3 分钟频率时,则:
- 第一行将包含2018-01-01 00:00:00 和 之间的数据2018-01-01 00:03:00.
- 下一行将包含介于 2018-01-01 00:03:00和2018-01-01 00:06:00.
- 等等。
因此,根据您的源数据:
- 第一行包含2018-01-01(午夜尖锐(的数据。
- 由于在 00:03:00 和 00:06:00(2018-01-01(,第二行包含只是NaN值。
- 这同样适用于其他行,截至2018-01-01 23:57:00(这些时间片没有源数据(。
- 下一行,对于2018-01-02 00:00:00可以填充源数据。
- 等等。
这种行为并没有什么奇怪的。重新采样就是这样工作的。 当您实际对源数据进行上采样时,也许您应该插值缺失值?