python - 用 Pandas 重新采样 python 列表

标签 python pandas resampling

这里是 python 和 pandas 的新手。

我进行了一个返回时间序列的查询。我永远不确定我从查询中收到多少数据点(运行一天),但我所知道的是我需要对它们重新采样以包含 24 个点(一天中每小时一个)。

打印 m3hstream 给出

[(1479218009000L, 109), (1479287368000L, 84)]

然后我尝试制作一个数据框 df

df = pd.DataFrame(data = list(m3hstream), columns=['Timestamp', 'Value'])

这给了我一个输出

          Timestamp  Value
       0  1479218009000    109
       1  1479287368000     84

下面我这样做

 daily_summary = pd.DataFrame()
 daily_summary['value'] = df['Value'].resample('H').mean()
 daily_summary = daily_summary.truncate(before=start, after=end)
 print "Now daily summary"
 print daily_summary

但这给了我一个 TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了“RangeIndex”的实例

谁能告诉我如何对其重新采样,以便我在查询的 24 小时内每小时得到 1 分?

谢谢。

最佳答案

  • 您需要做的第一件事是将 'Timestamp' 转换为实际的 pd.Timestamp。看起来那些是毫秒
  • 然后 resample 并将 on 参数设置为 'Timestamp'

df = df.assign(
    Timestamp=pd.to_datetime(df.Timestamp, unit='ms')
).resample('H', on='Timestamp').mean().reset_index()

             Timestamp  Value
0  2016-11-15 13:00:00  109.0
1  2016-11-15 14:00:00    NaN
2  2016-11-15 15:00:00    NaN
3  2016-11-15 16:00:00    NaN
4  2016-11-15 17:00:00    NaN
5  2016-11-15 18:00:00    NaN
6  2016-11-15 19:00:00    NaN
7  2016-11-15 20:00:00    NaN
8  2016-11-15 21:00:00    NaN
9  2016-11-15 22:00:00    NaN
10 2016-11-15 23:00:00    NaN
11 2016-11-16 00:00:00    NaN
12 2016-11-16 01:00:00    NaN
13 2016-11-16 02:00:00    NaN
14 2016-11-16 03:00:00    NaN
15 2016-11-16 04:00:00    NaN
16 2016-11-16 05:00:00    NaN
17 2016-11-16 06:00:00    NaN
18 2016-11-16 07:00:00    NaN
19 2016-11-16 08:00:00    NaN
20 2016-11-16 09:00:00   84.0

如果要填充那些 NaN 值,请使用 ffillbfillinterpolate

df.assign(
    Timestamp=pd.to_datetime(df.Timestamp, unit='ms')
).resample('H', on='Timestamp').mean().reset_index().interpolate()

             Timestamp   Value
0  2016-11-15 13:00:00  109.00
1  2016-11-15 14:00:00  107.75
2  2016-11-15 15:00:00  106.50
3  2016-11-15 16:00:00  105.25
4  2016-11-15 17:00:00  104.00
5  2016-11-15 18:00:00  102.75
6  2016-11-15 19:00:00  101.50
7  2016-11-15 20:00:00  100.25
8  2016-11-15 21:00:00   99.00
9  2016-11-15 22:00:00   97.75
10 2016-11-15 23:00:00   96.50
11 2016-11-16 00:00:00   95.25
12 2016-11-16 01:00:00   94.00
13 2016-11-16 02:00:00   92.75
14 2016-11-16 03:00:00   91.50
15 2016-11-16 04:00:00   90.25
16 2016-11-16 05:00:00   89.00
17 2016-11-16 06:00:00   87.75
18 2016-11-16 07:00:00   86.50
19 2016-11-16 08:00:00   85.25
20 2016-11-16 09:00:00   84.00

关于python - 用 Pandas 重新采样 python 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478822/

相关文章:

python - 如何在特殊情况下提取两个关键字之间的子字符串?

python - TensorFlow 如何用边缘值填充张量

python - gdb python模块读取内存内容

Python:Groupby 第一个非 NaN 值

python - Pandas :如何按列和索引对数据框进行排序

c++ - 对音频流进行上采样和编码

python - 这个 python 装饰器是如何工作的?

python - 我希望绘制 df.mean() 的输出

python - Pandas 如何使用字符串对列重新采样

r - 如何逐步提取mlr3调谐图?