【发布时间】:2020-01-04 04:45:09
【问题描述】:
很长的问题,什么是合适的重采样频率/规则?有时我得到一个主要充满 NaN 的数据框,有时它工作得很好。我以为我掌握了它。
下面是一个例子,
我正在处理大量数据并且正在更改我的resample 频率,并注意到出于某种原因,某些重采样规则在每行中仅生成 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)
当我使用 offset aliases 重新采样数据时,我得到了意想不到的结果。
下面我每 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 连续出现。
可以对数据帧进行重新采样,增量小于日期时间分辨率吗?
过去,我在尝试重新采样跨越一年的大型数据集时遇到了麻烦,日期时间索引 formatted 为 %Y:%j:%H:%M:%S (year:day #: hour :分:秒,注意:足够接近而不是冗长)。尝试每 15 或 30 天重新采样一次也产生了与 NaN 非常相似的结果。我认为这是由于没有月份的奇怪日期格式,但 df.head() 显示了正确日期的索引。
【问题讨论】:
-
你所有的日期都有午夜时间段:
00:00:00.